首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这两个输出为什么不一样呢(关于类继承和虚函数的有关问题)

2012-09-03 
这两个输出为什么不一样呢(关于类继承和虚函数的问题)C/C++ code#includeiostreamusing namespace stdc

这两个输出为什么不一样呢(关于类继承和虚函数的问题)

C/C++ code
#include<iostream>using namespace std;class A{protected:    int m_data;public:    A(int data=0)    {        m_data=data;    }    int GetData()    {        return doGetData();    }    virtual int doGetData()    {        return m_data;    }};class B:public A{protected:    int m_data;public:    B(int data=1)    {        m_data=data;    }    int doGetData()    {        return m_data;    }};class C:public B{protected:    int m_data;public:    C(int data=2)    {        m_data=data;    }};int main(){    C c(10);    cout<<c.A::GetData()<<endl;    cout<<c.A::doGetData()<<endl;    return 0;}


输出结果是
1
0

有人能比较具体得解释一下内在的调用机制么?谢谢

[解决办法]
探讨

引用:

引用:

为什么c.A::doGetData() 不可以理解成:
实际类型是c,因为doGetData是虚函数,于是调用c中的doGetData(),c中没有,于是调用B中的doGetData()?

这个已经和类型没关系了,相当于你直接填写了 函数入口地址

为什么第一个有关系,第二个没有呢?区别在什么地方?

热点排行