[英]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.