考虑如下代码
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
本文探讨了C++中多态的概念,并通过具体代码示例对比了虚函数与非虚函数在派生类中的调用行为差异。当基类指针指向派生类对象时,若成员函数为虚函数,则会调用派生类的实现;若为非虚函数,则调用基类的实现。

1636

被折叠的 条评论
为什么被折叠?



