Maison > développement back-end > C++ > Comment puis-je utiliser un vecteur de classes abstraites en C ?

Comment puis-je utiliser un vecteur de classes abstraites en C ?

Susan Sarandon
Libérer: 2024-12-17 13:09:25
original
1003 Les gens l'ont consulté

How Can I Use a Vector of Abstract Classes in C  ?

Classes et vecteurs abstraits

Dans la programmation orientée objet, une classe abstraite sert de modèle pour définir un comportement commun entre différentes classes. Cependant, on peut rencontrer un problème en tentant d'instancier un vecteur de classes abstraites.

L'erreur "Impossible d'instancier une classe abstraite" survient car un vecteur nécessite que ses éléments soient des objets concrets pouvant se voir allouer de la mémoire. Les classes abstraites, en revanche, ne sont pas destinées à être instanciées directement puisqu'elles contiennent des fonctions virtuelles pures qui doivent être remplacées.

Pour surmonter ce problème, une solution de contournement consiste à remplacer la classe abstraite par une classe concrète qui implémente le fonctions virtuelles nécessaires, comme suggéré :

class IFunnyInterface
{
public:
    virtual void IamFunny() { throw new std::exception("not implemented"); }
};
Copier après la connexion

Cependant, cette approche peut ne pas être souhaitable car elle introduit des détails d'implémentation inutiles qui pourraient être évités dans une base abstraite class.

Une solution plus idiomatique en C consiste à utiliser un vecteur de pointeurs vers des classes abstraites :

std::vector<IFunnyInterface*> ifVec;
Copier après la connexion

Cela permet un comportement polymorphe et empêche le découpage des objets. Les pointeurs vers des classes abstraites sont capables de stocker des objets de classes dérivées, vous permettant de conserver l'accès aux fonctionnalités spécifiques de chaque type.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal