(转自:https://blog.csdn.net/stpeace/article/details/77799724)
原题目程序比较长, 我来简化成核心的考察部分, 如下:
#include <iostream>
using namespace std;
class A
{
public:
virtual void x()
{
cout << "A::x" << endl;
}
void y()
{
x();//注意这里
cout << "A::y" << endl;
}
};
class B : public A
{
public:
virtual void x()//覆盖
{
cout << "B::x" << endl;
}
virtual void y()//隐藏
{
cout << "B::y" << endl;
}
};
int main()
{
A *p = new B;//基类指针指向派生类对象
p->y(); //因为是基类指针,所以调用的是基类中的y(),
//而y()函数里面的x()调用的是派生类中的x(),因为派生类的x()把基类的x()覆盖了。
return 0;
}
//结果:
//B::x
//A::y