0

在通过异构列表调用虚函数时,我在弄清楚如何为成员数据分配值时遇到了一些麻烦。

这是我正在尝试做的一个例子:

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

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

 private:
 int i1, i2;
}

在 main() 中:

list = new A[10];

list[0] = new B;

list[0]->Func1();

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;
}

如果通过 main 中的父类的指针进行调用,我正在寻找适当的方法来访问派生类的函数中的派生类的成员数据。任何帮助将非常感激!

4

1 回答 1

1

在执行virtual函数时,您现在知道对象的类型是定义函数的类的类型或其派生的类。也就是说,在您的B::func1()函数中,您知道this指向一个B对象。该对象可能是派生自的类型,B但您仍然拥有B.

另一方面,您知道静态list[0]指向B对象。您在代码中未注释的代码不起作用。注释代码看起来不错

于 2013-11-15T20:50:19.657 回答