Maison >développement back-end >C++ >Pourquoi ne puis-je pas créer un « std :: vector » de classes abstraites ?
Dans la programmation orientée objet, les classes abstraites servent de modèles dont d'autres classes peuvent hériter. Cependant, ils ne peuvent pas être instanciés directement en raison de leur nature incomplète. Cette limitation s'étend à la déclaration d'un std::vector d'une classe abstraite, générant une erreur indiquant "ne peut pas instancier une classe abstraite".
Les classes abstraites sont déclarées avec du virtuel pur. fonctions, qui n’ont aucune implémentation. Cela signifie qu’il ne s’agit pas d’entités concrètes pouvant être créées en tant qu’objets. Au lieu de cela, ils sont censés être hérités et leurs fonctions abstraites implémentées dans les classes enfants.
Pour surmonter ce problème, il existe deux solutions de contournement principales :
Vecteur de pointeurs vers des classes abstraites :
Au lieu de déclarer un std::vector de classes abstraites, vous pouvez utiliser un std::vector de pointeurs vers des classes abstraites. Cela vous permet de stocker des instances de classes enfants tout en préservant le comportement polymorphe.
std::vector<IFunnyInterface*> ifVec;
Vecteur de classe dérivé :
Au lieu d'utiliser une classe abstraite, vous peut créer une classe dérivée qui hérite de la classe abstraite et fournit des implémentations concrètes de toutes ses fonctions virtuelles. Vous pouvez ensuite déclarer un std::vector de cette classe dérivée.
class FunnyDerived : public IFunnyInterface { // Implement abstract function }; std::vector<FunnyDerived> fdVec;
Bien qu'il puisse sembler contre-intuitif de restreindre la création de std::vectors des classes abstraites, c'est un aspect fondamental de la programmation orientée objet. En adoptant l'utilisation de pointeurs vers des classes abstraites ou des classes dérivées, vous pouvez conserver la flexibilité et le polymorphisme tout en respectant les limites des classes abstraites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!