J'ai 3 classes:Cast-order pour les classes héritées?
class Super
{
virtual int getType() { return 1; }
}
class Special : public class Super
{
virtual int getType() { return 2; }
}
class SpecialSpecial : public class Special
{
virtual int getType() { return 3; }
}
Et j'ai une fonction qui prend un std::vector<Super*>
comme argument:
void handleClasses(std::vector<Super*> superVector)
{
foreach element in superVector //Pseudocode!!
{
if(element->getType() == 1)
std::cout << "Thats a SuperClass" << std::endl;
else if(element->getType() == 2)
std::cout << "Thats a SpecialClass" << std::endl;
else if(element->getType() == 3)
std::cout << "Thats a SpecialSpecialClass" << std::endl;
}
}
Il pourrait y avoir un utilisateur qui hérite de la classe Special
:
class ParalellSpecial : public class Special
{
virtual int getType() { return 4; }
}
Maintenant, la fonction handleClasses
ne peut pas comprendre la nouvelle classe avec le type 4, mais il devrait pouvoir o utiliser la classe supérieure suivante (dans ce cas, il s'agit de Special
).
Comment quelqu'un pourrait-il implémenter une telle chose? Existe-t-il un modèle de conception qui permet de créer un ordre hiérarchique de classes et la super-classe suivante disponible sera utilisée comme solution de repli, si la classe actuelle n'a pas pu être utilisée (car elle est inconnue)?
REMARQUE: Les identificateurs de type sont uniquement à des fins de démonstration. Il existe sûrement de meilleures méthodes pour identifier un classtype en C++ (RTTI).
Bon exercice, mais quel est le vrai problème? Pourquoi utilisez-vous if-else-if au lieu de simplement mettre du code réel dans cette méthode virtuelle? – sharptooth
Tu ne peux pas déjà faire ça? Si le type est inconnu, vous retombez dans Special – Cratylus
@userxxx: Il pourrait y avoir beaucoup de classes inconnues. Peut-être qu'un utilisateur hérite de 'super', puis hérite d'un autre userclass etc ... Il pourrait aussi y avoir plusieurs méthodes' handleClasses', qui comprennent en partie User-classes etc – MOnsDaR