子类对象强行调用父类虚函数。
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++ 虚函数表详解
虚函数表(Virtual Table,简称V-Table)是一种机制,用于存储类的虚函数的地址,解决继承和覆盖的问题,使得父类的指针可以正确地调用子类的成员函数。
c++中子类对象不能调用父类中的虚函数
这就是“子类对象不能调用父类中的虚函数”的含义。
Java中父类怎么调用子类的方法
Java中父类调用子类的方法知识点总结 Java中父类调用子类的方法是面向对象编程中一个常见的问题,了解如何在Java中实现父类调用子类的方法对于编程开发者来说非常重要。
java 子类对象赋值给父类对象的使用
**构造器与初始化**:子类对象在创建时会先调用父类的构造器,确保父类的状态得到正确初始化,然后执行子类自己的构造逻辑。3.


