Bonjour à tous,
Je suis actuellement en train d'apprendre le C++ sur le livre de Stroustrup. Je suis au chapitre concernant les classes et on me demande de construire une classe Livre dont les membres sont ISBN, l'auteur, le titre, la date de copyright, un membre indiquant si le livre est sorti ou non (d'une bibliothèque par exemple). On nous demande d'écrire des fonctions qui renvoient la valeur de chacun des membres avec une précision concernant l'ISBN qui doit s'écrire suivant ce format n-n-n-x (n peut etre un entier de longueur variable suivant Wikipedia, et x soit une lettre soit un chiffre). Afin de pouvoir le représenter sous ce format j'ai pensé à écrire une classe pour l'ISBN. J'ai également implémenté une classe Date pour représenter la Date dont les détails ne nous intéressent pas pour le problème que je rencontre. Voici un extrait de mon code (un code de débutant) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class ISBN{ public: ISBN(int a, int b, int c, char x); int get_a() const {return a;} int get_b() const {return b;} int get_c() const {return c;} char get_x() const {return x;} private: int a,b,c; char x; };On me demande de surcharger l'opérateur == afin de vérifier si deux livres ont le même ISBN.
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 class Livre{ public: Livre(ISBN isb,string title, string author, Date copyright); ISBN get_isb() const {return isb;} string get_title() const {return title;} string get_author() const {return author;} Date get_date() const {return copyright;} void borrow(int i) {release = (i==1) ? true : false;} private: ISBN isb; string title; string author; Date copyright; bool release; };
J'ai d'abord fait :
et ensuite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 bool operator==(const ISBN& isb1, const ISBN& isb2) { if (isb1.get_a()==isb2.get_a() && isb1.get_b()==isb2.get_b() && isb1.get_c()==isb2.get_c() && isb1.get_x()==isb2.get_x()) return true; else return false; }
if (book1.get_isb()==book2.get_isb()) compare deux termes de type ISBN, avec la surcharge que j'ai implémenté juste avant cela ne devrait pas poser de problème a priori puisque j'ai défini le test d'égalité de deux variables de type ISBN, non ? A la compilation ma fonction bool operator==(const ISBN& isb1, const ISBN& isb2) ne pose pas de problème mais la suivante si avec ceci comme erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 bool operator==(const Livre& book1, const Livre& book2) { if (book1.get_isb()==book2.get_isb()) return true; else return false; }
error: no match for 'operator==' in '((Livre*)book1)->Livre::get_isb() == ((Livre*)book2)->Livre::get_isb()'|
Des suggestions ?![]()
Partager