子类对象强行调用父类虚函数。
class A
{
protected:
int m_data;
public:
A(int data = 0){ m_data = data; }
int GetData(){ return doGetData();}
virtual int doGetData(){ return m_data;/*m_data =0 */}
};
class B:public A
{
protected:
int m_data;
public:
B(int data = 1){ m_data = data; }
//这里A 中的m_data = 0 ,B中的m_data = 1
int doGetData(){ return m_data ;/*m_data =1 */} //实现接口
};
class C:public B
//C继承了A&B类的方法&属性,且未从新定义接口,故接口还是B类中定义的
{
protected:
int m_data;
public:
C(int data = 2){ m_data = data; }
//这里A 中的m_data = 0 ,B中的m_data = 1,C 类中的m_data = 2
};
int main()
{
C c( 10);
cout<< c.GetData()<< endl; //输出为:1
cout<< c.A::GetData()<< endl;//输出为:1
cout<< c.B::GetData()<< endl; //输出为:1
cout<< c.C::GetData()<< endl; //输出为:1
cout<< c.doGetData()<< endl; //输出为:1
cout<< c.A::doGetData()<< endl; //输出为:0
cout<< c.B::doGetData()<< endl; //输出为:1
cout<< c.C::doGetData()<< endl; //输出为:1
system("pause");
return 0;
}
这里我有点迷惑
c.A::doGetData()
c对象的内存布局中他的虚函数表里是没有A的doGetData这个虚函数的啊
如果强行去找对应A的doGetData,他是怎么找到的?
还有就是 c.A::GetData()和c.A::doGetData()最终不都相当于A类指针指向C类对象么,答案不应该都是1么。
迷惑