☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

派生类不应重新定义与基类相同的非虚函数

6.8.1 ID_nonVirtualOverride
目录 › next › previous

派生类不应重新定义与基类相同的非虚函数,否则与多态机制相矛盾,易造成意料之外的问题。

示例:

struct A {
    int foo() const { return 0; }
};

struct B: A {
    int foo() const { return 1; }  // Non-compliant
};

int bar(A* a) {
    return a->foo();
}

int main() {
    B b;
    return bar(&b);  // Problematic
}

如果将 B 类型的指针传入 bar 函数,将执行 A::foo,然而参数实际指向的是 B 类型的对象,但 B::foo 不会被执行,这就形成了逻辑上的矛盾,极易造成意料之外的问题。

参考

Effective C++ item 36
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.