Classe abstraite
DRSBMM
-
DRSBMM -
DRSBMM -
Bonjour,
je veux une definition de classe abstraite en C++,et un exemple si vous pouvez.
et merci d'avance.
je veux une definition de classe abstraite en C++,et un exemple si vous pouvez.
et merci d'avance.
Configuration: Windows XP Internet Explorer 7.0
1 réponse
-
Une classe abstraite est une classe qui ne peut être instanciée (c'est-à-dire qu'on ne pourra pas créer d'objet de ce type).
Alors pourquoi créer une classe abstraite?
Simplement pour servir de modèle à d'autres classes, car si elle ne peut être instanciée, elle peut (et même elle doit) être dérivée.
Pour qu'une classe soit abstraite, il suffit simplement qu'elle contienne au moins une fonction virtuelle, c'est à dire une fonction déclarée mais non définie mais qui devra nécessairement être définie dans les classes filles.-
-
-
Cette question me laisse pantois; j'ai l'impression que tu as déjà bien potassé la question. En effet le problème du destructeur est délicat voire piégeux.
class A { ... }; class B : public A { ... }; // Si on défini: A* a = new B; // puis plus loin delete a; // Y'a un os car seul le destructeur A est appellé... et pourtant il s'agit d'un objet de class B //Le problème est résolu en créant un destructeur virtual dans A, le polymorphisme forcera l'appel à celui de B. virtual ~A() {} -
-
Si on peut!
Je n'ai pas précisé mais c'est la classe A qui est abstraite (je pense que tu l'avais compris).
On peut car 'new B' renvoie un pointeur sur un objet de la classe B qui elle n'est pas abstraite.
Donc on ne crée pas d'instance de la classe A; d'autre part même en écrivant 'a = objet de classe B', il ne faut pas perdre de vue que l'objet en question reste de classe B et, en aucun cas, n'est transformé en un objet de classe A. C'est la raison pour laquelle le polymorphisme jouera par exemple lors de 'delete a' (et aussi à l'appel de toute fonction virtuelle déclarée dans A).
-