J'ai une hiérarchie de classe suivante:Comment comparer deux pointeurs à un objet par leur type le plus dérivé?
class Base{
....
virtual bool equal(Base *);
}
class Derived1: public Base{
....
virtual bool equal(Base *);
}
class Derived2: public Derived1{
}
class Derived3: public Derived1{
}
class Derived4: public Base{
}
Comment je devrais écrire Base :: égale (Base *) fonction telle que compare Derived4 et similaire classé? Ils n'ont pas de champs de données, donc vérifiez seulement que les objets réels sont de la même classe dérivée. Et comment écrire Derived1 :: equal (Base) - les Derived2 et Derived3 sont similaires, ils n'ont pas de champ de données et doivent être comparés par des champs de données dans Derived1 et vérifient que les objets sont issus des mêmes classe?
Mise à jour: Je veux parce que je ne veux pas écrire des fonctions identiques à chaque classe dérivée tels que:
bool Derived::equal(Base *b){
Derived *d = dynamic_cast<Derived*>(b);
return d;
}
Eh bien, par conception, les objets dérivés ne devraient pas avoir une bonne connaissance l'un de l'autre. Pourquoi veux-tu faire cela? – GManNickG
@GMan Accepté. C'est une odeur de code. Vous voulez probablement juste mieux concevoir votre hiérarchie de classe et faire confiance au polymorphisme. – xanadont
maudit ma capacité de frappe. à * – GManNickG