子类对象强行调用父类虚函数。
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么。
迷惑
{
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么。
迷惑
...全文
相关推荐
c++虚函数使用
c++虚函数.C++中的虚函数的作用主要是实现了多态的机制。
C++ 虚函数表详解
很好的虚函数表解析, 代码,图,文并茂,对多态的理解会非常深刻
c++中子类对象不能调用父类中的虚函数
c++里,指针和引用是很重要的概念,这个程序不仅对指针和引用做了说明、使用,而且对子类不能继承父类虚函数也做了说明。
Java中父类怎么调用子类的方法
主要介绍了Java父类调用子类的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java 子类对象赋值给父类对象的使用
java 子类对象赋值给父类对象的使用,包括代码及详解,个人笔记


