『effective c++ 读书笔记36』 绝不重新定义继承而来的 non-virtual 函数

class D 系由 class B 以 public 形式派生而来, class B 定义一个 public 成员函数 mf。

1
2
3
4
5
6
class {
public:
void mf();
...
};
class D: public B { ... };

对于类型为 D 的对象 x

  • 行为一

    1
    2
    B* pB = &x;
    pB->mf();
  • 行为二

    1
    2
    D* pD = &x;
    pD->mf();

任何情况下都不要重新定义继承而来的 non-virtual 函数。