[C++][Héritage][Agrégation]
Bonjour,
J'ai un problème pour faire un agrégation d'un héritage d'une classe abstraite... :? je la refais en plus imagé:
Je possède une classe A qui a une relation d'agrégation avec une classe B, abstraite.
J'ai un certain nombre de classes filles (C, D, E F...) héritées de B. Maintenant, je voudrais pouvoir, dans A, créer une methode du style AddClasseB( B*,x,y) qui me permettrais d'ajouter n'importe quel objet C, D, E.. Mais je vois pas comment faire...
Code:
1 2 3 4 5 6 7 8 9 10
| class A{
public:
void AddClassB(B* Obj, int x, int y);
private :
B** tabB;
}; |
J'ai redéfini l'opérateur égal de la classe Mère et des classes filles, mais ça me sert à rien...
Est-ce que c'est possible ce que je veux faire??
Merci d'avance pour vos réponses,
Re: [C++][Héritage][Agrégation]
Citation:
Ca fait appel à l'opérateur égal de B, et moi je voudrais pouvoir affecter dans le tableau un objet C, D, E...hérité de B! Et je pense pas que çe soit possible, Dites moi que si!!
Tu n'affectes pas un B, mais un B*. Donc pas d'appel à un quelconque opérateur =, ce qui est tout à fait logique avec une telle sémantique. Donc qu'est-ce qui ne marche pas ? Ton code est correct pour l'instant. (pense quand même à std::vector et aux pointeurs intelligents -- voir la FAQ C++).
Citation:
Tout d'abord, l'objet B dans ta classe A n'est pas une relation d'agrégation mais de composition car à la destruction de ton instance de A, l'objet B ne sera pas détruit car c'est un pointeur.
Ca c'est un détail d'implémentation, rien n'empêche de lier la durée de vie d'un objet à son contenant, qu'il soit alloué dynamiquement ou non. C'était juste pour pinailler.