考虑如下代码
class B {
public:
void mf();
// ...
};
class D : public B {//..};
D x; // x是一个类型为D的对象
//如果有以下行为
B* pB = &x; // 获得一个指针指向x
pB->mf(); // 经由该指针调用mf
//异于以下行为
D* pD = &x; // 获得一个指针指向x
pD->mf(); // 经由该指针调用mf
但是如果mf是一个non-virtual函数而D定义有自己的mf版本,那就不是如此
class D : public B {
public:
void mf(); // 遮掩了B::mf
// ...
};
pB->mf(); //调用B::mf
pD->mf(); //调用D::mf