Dans une simulation de physique C++, j'ai une classe appelée Circle et Square. Ce sont des formes, et ont une méthode appelée push(), qui lui applique une force. Il y a alors un cas particulier de Circle, appelé SpecialCircle, dans lequel push() devrait présenter des propriétés légèrement différentes. Mais en fait, il y a aussi SpecialSquare() qui devrait présenter les mêmes propriétés de force. Je voudrais donc avoir une classe de base abstraite appelée Shape qui s'occupe des cercles et des carrés, mais j'aimerais aussi une classe de base abstraite appelée Special, qui applique des propriétés spéciales à force().Héritage multiple en C++ entraînant des difficultés à surcharger les fonctionnalités communes
Quelle est la meilleure façon de concevoir cette structure de classe?
Jusqu'à présent, j'ai:
class Shape {
virtual void push();
};
class Circle : public Shape {};
class Square : public Shape {};
class Special {
virtual void push();
};
class SpecialCircle : public Circle, Special {};
class SpecialSquare : public Square, Special {};
Bien sûr, la compilation ne sera pas ci-dessus, puisque spécial :: push() et de forme :: conflit push(). Je reçois "erreur: demande de membre" push "est ambigu", comme prévu.
Comment est-ce que je peux réorganiser ma structure de classe pour que Circle et Square puissent partager certaines propriétés entre elles, mais SpecialCircle et SpecialSquare peuvent toujours hériter de Shape, et héritent également des fonctionnalités modifiées de Special?
Merci. Ps., Est-ce le problème de l'héritage du diamant?
Ce n'est pas le problème du diamant - c'est quand vous héritez de 2 classes qui héritent chacune d'une même classe. Donc la classe dérivée a 2 chemins vers la classe de base ultime. –
"class Square: public Square {};" Faute de frappe? – dmckee