Bonjour,
J'ai un petit souci théorique en C++:
Question : comment appeler dans une classe fille l'opérateur de test d'égalité de la classe mère si cette dernière est abstraite ?
Désolé si la réponse et déjà quelque part, j'ai pas trouvé dans les diverses FAQ,et une recherche dans le forum avec les mots clé "operator héritage" me renvoie 56 pages de résultats...
Contexte: imaginons une classe A, qu'on dérive en une classe B.
On veut les doter d'un opérateur de test d'égalité, qui s'occupe de tester leurs données membres respectives.
Dans la version de la classe B, on veut tester l'égalité des données membres spécifiques à B, et tester l'égalité des données membres héritées de A.
Pour éviter la duplication de code (et les erreurs potentielles associées), j'appelle donc dans l'opérateur de B l'opérateur de A. Pour l'instant, je fais comme ça:
Pbe: ceci est rejeté par le compilo si la classe A est virtuelle. En effet, le cast
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 class B:public A { private: TypeQuelconque1 dm1; TypeQuelconque2 dm2; // etc. public: bool operator == ( const B& arg ) const { if( dm1 != arg.dm1 ) return false; if( dm2 != arg.dm2 ) // etc... return false; return (A)*this == (A)arg; } };
correspond à une (tentative de) création d'un objet de type A, ce qui est interdit si elle est abstraite.
Question préliminaire : cette version vous paraît-elle correcte (mis à part les cast "à-la-C") ?
Question principale: comment faire ?
Pré-commentaire: évidemment, on peut se poser la question de la pertinence de définir un opérateur de test d'égalité pour une classe abstraite, vu que par définition on ne pourra jamais tester deux objets du type de cette classe, mais l'intérêt, c'est si je dérive A en d'autres classes: je n'aurais à définir le contenu de cet opérateur qu une seule fois.
Partager