2013-11-15 49 views
0

异构列表,虚函数,我遇到了一些麻烦搞清楚如何通过异质列表调用虚函数时,值分配给成员的数据成员数据

这里是什么,我试图做一个例子:

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(); 

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

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

+1

注释掉的方式是正确的方法。 – Chad

+0

谢谢!我担心通过A指针类型调用会使数据成员直接分配无法工作。但是,这清除了它。 –

回答

1

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

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

+0

我明白了。所以编译器并不知道哪个对象指向基类的指针,该指针动态指向的对象指向运行时?所以我不能通过连接到基类指针的箭头操作符访问非基类的成员数据? –