Design composite et héritage multiple
Bonjour à tous !
Je m'adresse à vous grand développeurs C++. Je sais que sur developpez.com, j'aurais toujours une réponse claire et précise, ce qui est extrêmement plaisant.
Donc, j'ai un petit problème de conception.
Imaginons :
J'ai deux classes A et B abstraites.
Code:
1 2 3 4 5 6 7 8 9 10 11
| class A
{
public:
virtual void f() const = 0;
};
class B
{
public:
virtual void g() const = 0;
}; |
Je possède aussi une classe AB qui se trouve être implémenté de cette manière.
Code:
1 2 3 4 5 6
| class AB : public A, public B
{
public:
void f() const {cout << "Je suis la fonction f de AB." << endl;}
void g() const {cout << "Je suis la fonction g de AB" << endl;}
}; |
La classe AB hérite publiquement de A et de B.
Mais maintenant les choses se corsent. Je décide d'implémenter le design pattern "composite" (vous l'appelez ainsi sur ce site).
Code:
1 2 3 4 5 6
| class ABs : private vector<A*>, private vector<B*>
{
public:
void add(const A& a) {vector<A*>::push_back(a.clone());}
void add(const B& b) {vector<B*>::push_back(b.clone());}
}; |
Où clone est la fonction qui fait une copie profonde de l'objet.
Voilà voilà, je pense que vous cernez le problème. J'aimerais faire que quand j'ajoute un AB dans ma liste de A et de B, il ne s'ajoute qu'un seul et unique AB. De plus, je crois bien que le code ne compile pas ici. Arrivez-vous à le faire compiler? Si certaines parties sont encore floues merci de m'en informer.
Merci beaucoup de votre aide !