salut
comment je peux surcharger l'opérateur >> pour qu'il puisse lire des entiers dans une classe donnée
merci
salut
comment je peux surcharger l'opérateur >> pour qu'il puisse lire des entiers dans une classe donnée
merci
Tu ne dois que remplacer le "// blah blah" avec ton code qui extraire un entier de "source".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MaClasse &operator >>( MaClasse &source, int &entier ) { // blah blah return source; }
cynique >> non, ce que tu proposes est faux et ne compile même pas.
Regardez tous les deux la FAQ, ya la réponse dedans
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Ca compile:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include <iostream> using namespace std; class MaClasse{}; MaClasse &operator >> ( MaClasse &source, int &entier ) { // blah blah return source; } MaClasse &operator << ( MaClasse &source, const int &entier ) { // blah blah return source; } int main () { MaClasse A; int b; A >> b; A << b; return 0; }![]()
Si ca compile c'est car c'est comme surchager l'opérateur virgule et l'opérateur &.
Exemple:
Il n'y a aucune différence sémantique avec ton code, sauf que >> est devenu , et que << est devenu &.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <iostream> using namespace std; class MaClasse{}; MaClasse &operator >> ( MaClasse &source, int &entier ) { // blah blah return source; } MaClasse &operator << ( MaClasse &source, const int &entier ) { // blah blah return source; } int main () { MaClasse A; int b; A >> b; A << b; return 0; }
Si on fait les choses dans les règles, la FAQ est la marche ca suivre.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Est-ce que ça veut dire que ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 #include <iostream> using namespace std; class MaClasse { public: size_t taille_pile; int pile[10]; bool erreur; MaClasse() : taille_pile(0), erreur(false) { ; } operator bool () { return !erreur; } }; MaClasse &operator >> ( MaClasse &source, int &entier ) { if (source.taille_pile == 0) { source.erreur = true; } else { entier = source.pile[source.taille_pile]; source.taille_pile--; } return source; } MaClasse &operator << ( MaClasse &source, const int &entier ) { if (source.taille_pile == 9) { source.erreur = true; } else { source.taille_pile++; source.pile[source.taille_pile] = entier; } return source; } int main () { MaClasse A; int b; if (!(A << 32 << 28 << 0 << 12)) { cout << "Erreur lors du chargement de chiffres" << endl; return 1; } while (A >> b) { cout << "Depilage: " << b << endl; } return 0; }
ça dépend.Mon code marche pour faire:
Je ne sais pas pourquoi on voudrait faire une telle chose. Peut-être j'ai malcompris la question. C'est possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 MaClasse a(...); int un_entier; int un_autre_entier; a >> un_entier >> un_autre_entier;
Et definitivement je ne comprends pas ce que tu dis avec & et ,![]()
david si tu postes des liens ce sera plus sympa![]()
http://cpp.developpez.com/faq/cpp/?p...teur_affichage
(y'a une fonction recherché dans la faq..)
Goten, c'est bien pour leurs apprendre à utiliser cette fonction que je ne donne pas le lien.
Il est bien plus bénéfique de chercher par soi même (en sachant que le réponse existe) que de cliquer sur un lien tout donné car ca incite à ne faire aucun efforts de recherche.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
J'ai longuement hésité à le donné... Mais en même temps le fait de tapé operator>> dans un champ de recherche c'est à la portée de tout le monde... et je suis pas sur que ça est un quelconque intérêt pédagogique.
"Never use brute force in fighting an exponential." (Andrei Alexandrescu)
Mes articles dont Conseils divers sur le C++
Une très bonne doc sur le C++ (en) Why linux is better (fr)
Partager