Pregunta

Tengo problemas para descubrir cómo asignar valores a los datos de los miembros cuando llamo a una función virtual a través de una lista heterogénea.

Aquí hay un ejemplo de lo que estoy tratando de hacer:

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

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

 private:
 int i1, i2;
}

Dentro de principal():

list = new A[10];

list[0] = new B;

list[0]->Func1();

Declaración 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;
}

Estoy buscando la forma adecuada de acceder a los datos de los miembros de una clase derivada dentro de una función de la clase derivada si llamo a través de un puntero de la clase principal desde principal.¡Cualquier ayuda sería muy apreciada!

¿Fue útil?

Solución

Mientras se ejecuta un virtual funciona ahora que el tipo de objeto es el tipo de clase en la que está definida la función o una clase derivada del mismo.Es decir, en tu B::func1() función que sabes this apunta a un B objeto.El objeto puede ser de un tipo derivado deB pero todavía tienes todo presente en B.

Por otro lado, tu no saber estáticamente que list[0] puntos a B objeto.El código que ha descomentado en su código no funciona.El código comentado se ve bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top