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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !