在通过异构列表调用虚函数时,我在确定如何为成员数据赋值时遇到了一些麻烦。
以下是我正在尝试做的一个例子:
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中的父类的指针调用,我正在寻找在派生类的函数内访问派生类的成员数据的适当方法。任何帮助将不胜感激!
答案 0 :(得分:1)
在执行virtual
函数时,您现在可以确定对象的类型是定义函数的类的类型或派生它的类。也就是说,在B::func1()
函数中,您知道this
指向B
个对象。该对象可以是从B
派生的类型,但您仍然可以在B
中找到所有内容。
另一方面,您不静态地知道list[0]
指向B
对象。您在代码中取消注释的代码不起作用。评论的代码看起来不错