首先复习一下:override(覆盖)与overload(重载)的区别:
override(覆盖):派生类中重写基类的虚函数。
overload(重载):编写一个与已有函数名同名但参数列表不同的函数
《程序员面试宝典》中有一个关于覆盖的题目:
#include <iostream>
using namespace std;
class A
{
protected :
int m_data;
public:
A(int data=0)
{m_data =data;}
int GetData()
{
return doGetData();
}
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.GetData()<<endl;//类C的对象只有从A继承来的GetData函数
cout<<c.A::GetData()<<endl;
cout<<c.B::GetData()<<endl;//类B没有GetData函数,但有A继承来的
cout<<c.C::GetData()<<endl;//同样是来自A的成员函数A::GetData()
cout<<c.doGetData()<<endl;//doGetData()函数,A和B都有,但是A中的这个成员函数在B类中被覆盖了。也就是说C类中只有来自B类的成员函数doGetData()
cout<<c.A::doGetData()<<endl;
cout<<c.B::doGetData()<<endl;
cout<<c.C::doGetData()<<endl;
system("pause");
return 0;
}
运行结果如下:
看代码注释,相信你也已经知道原因了。