有没有理由在没有继承的情况下声明方法虚拟?

时间:2017-06-19 23:09:32

标签: c++

如果一个类没有子类,并且总是直接使用,是否有任何理由声明方法virtual

例如:

class Foo {
  public:
    virtual void DoBar {
      // Do something here.
    }
}

我在阅读的一些代码中遇到过这个问题,并且无法找到任何理由。

谢谢!

3 个答案:

答案 0 :(得分:1)

virtual关键字的本质与继承直接相关。这是CPP Ref的摘录: -

  

虚拟成员虚拟成员是可以成为的成员函数   在派生类中重新定义,同时保留其调用属性   通过参考。函数变为虚拟的语法是   在声明之前使用虚拟关键字

所以恕我直言 - 对你的问题的回答是否定的 - 这没有任何意义 - 除非代码从最初的实现发生了变化 - 相信我发生了很多事情!

答案 1 :(得分:1)

在编写库代码时,有用的是让未来的程序员记住谁可能想要扩展类并提供自己的行为。例如,在GUI库中具有虚拟 'save all queries into string array, maximum 1000 qryUpdateArray(iRecCount) = sUpdQry qryInsertArray(iRecCount) = sInsQry qryExistArray(iRecCount) = sExistQry 函数或虚拟鼠标处理函数是很常见的。它们提供默认实现,但它们允许扩展的可能性。

答案 2 :(得分:1)

如果那个班级是从那时得出的,那么它是有意义的。在决定程序的体系结构时,应该做出这些决定,并定义可以使用接口完成的任务。如果他们不希望从那里得到它,那么它不应该是虚拟的。如果他们确实希望从那时派生它,那么它应该是虚拟的(并且它也应该使析构函数成为虚拟的)。

相关问题