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

以下是我正在尝试做的事情的一个例子:

class A
{
 protected:
 virtual void func1();

 private:
 A * list;
}

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

 private:
 int i1, i2;
}

内主要():

list = new A[10];

list[0] = new B;

list[0]->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;
}

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top