繁体   English   中英

为什么不应该覆盖非虚拟功能

[英]Why Should not Override Non-Virtual Functions

我正在阅读有关继承的文档。 https://www10.informatik.uni-erlangen.de/en/Teaching/Courses/SS2011/CPP/kellermann.pdf在这里我读到了一行 在此处输入图片说明

我想知道为什么我们不应该覆盖非虚函数?

#include <iostream>

class Base{
public:
          void foo() const { std::cout << "Basic foo()" << std::endl; }
  virtual void bar() const { std::cout << "Basic bar()" << std::endl; }
};

class Derived
 : public Base
{
public:
          void foo() const { std::cout << "Derived foo()" << std::endl; }
  virtual void bar() const override { std::cout << "Derived bar()" << std::endl; }
};

int main(){
  Derived obj;
  Base& interface = obj;
  interface.foo();  //"Basic foo()"
  interface.bar();  //"Derived bar()"
}

覆盖非虚拟成员可能会导致意外结果,这是很难跟踪的。 即使您知道自己在做什么,通常您也不是唯一从事项目工作的人,并且这种代码也不是惯用的。 类层次结构通常用于动态多态性,并且当您覆盖多态对象的行为时,您期望它在转换为基础时会相应地表现。

就像适用于C ++的每条规则一样,它更像是一条经验法则,而不是一条诫命,因为这有时可能有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM