异构列表,虚拟函数和成员数据

时间:2013-11-15 20:16:59

标签: c++ inheritance virtual heterogeneous

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

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

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中的父类的指针调用,我正在寻找在派生类的函数内访问派生类的成员数据的适当方法。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

在执行virtual函数时,您现在可以确定对象的类型是定义函数的类的类型或派生它的类。也就是说,在B::func1()函数中,您知道this指向B个对象。该对象可以是从B派生的类型,但您仍然可以在B中找到所有内容。

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