Question sur l'héritage et l'organisation de code

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Imaginons les classes suivantes :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
class A
{
public:
  A();
  std::vector<A> getChildren() const;

private:
  std::vector<A> m_children;
};

class B : public A
{
public:
  B();

  void foo() const;
  void bar() const;
};

J’aimerais faire quelque que chose comme ça :

1
2
3
4
5
B b();

for (const B &child : b.getChildren()) {
  child.foo();
}

Seulement ça va me retourner une erreur, ce qui est logique car la méthode getChildren() me retourne un tableau de A et non de B.

D’où ma question, j’ai un programme avec plusieurs classes qui ont un comportement de nœud dans un arbre. J’aimerais donc que mes classes hérites d’une classe Node mais, comme vu dans l’exemple ci-dessus, je bloque totalement. Est-ce possible ? Comment faire ça proprement ?

Merci à vous !

Le problème ici c’est qu’un objet de type A (ou de type dérivé) pourrait avoir des enfants de n’importe quel sous-type de A. Avec un b.getChildren(), rien ne te garantit que tu n’auras que des nœuds de type B.

Si j’ai bien compris, tu voudrais que les classes qui dérivent de A aient chacun une liste de nœuds enfants de leur propre type. Je sais pas exactement le but derrière tout ça, mais je pense pas qu’une relation d’héritage soit idéal ici. Je verrais plutôt une classe template pour les comportements communs, puis ensuite une spécialisation des différents types de nœuds.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte