Question

J'ai du mal à comprendre comment attribuer des valeurs aux données des membres lors de l'appel d'une fonction virtuelle via une liste hétérogène.

Voici un exemple de ce que j'essaie de faire :

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

class B: public A
{
 protected:
 void func1();

 private:
 int i1, i2;
}

Dans main() :

list = new A[10];

list[0] = new B;

list[0]->Func1();

Déclaration de Func1() :

void B::Func1()
{
 int a, b;

 cin >> a >> b;

 list[0]->i1 = a;
 list[0]->i2 = b;

 // or can I just do this:
 // i1 = a;
 // i2 = b;
}

Je recherche le moyen approprié d'accéder aux données membres d'une classe dérivée dans une fonction de la classe dérivée si j'appelle via un pointeur de la classe parent depuis main.Toute aide serait très appréciée!

Était-ce utile?

La solution

Lors de l'exécution d'un virtual function vous savez maintenant que le type de l'objet est le type de classe dans laquelle la fonction est définie ou une classe dérivée de celle-ci.Autrement dit, dans votre B::func1() fonction tu connais this pointe vers un B objet.L'objet peut être d'un type dérivé deB mais tu as toujours tout présent dans B.

D'un autre côté, vous ne le faites pas savoir statiquement que list[0] pointe vers B objet.Le code que vous avez décommenté dans votre code ne fonctionne pas.Le code commenté semble OK

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top