有什么理由在没有继承的情况下声明一个虚拟方法



如果一个类没有子类,并且总是直接使用,有什么理由virtual声明一个方法吗?

例如:

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

我在阅读的一些代码中遇到了这个问题,但找不到任何理由。

谢谢!

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

虚拟成员

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

所以恕我直言 - 你的问题是否定的 - 这毫无意义 - 除非代码从初始实现中发生了变化 - 相信我,这种情况经常发生!

在编写库代码时,它很有用,可以记住未来的程序员可能想要扩展类并提供自己的行为。例如,在 GUI 库中具有虚拟Paint()函数或虚拟鼠标处理函数是很常见的。它们提供默认实现,但它们允许扩展的可能性。

如果该类旨在派生自,那么是的,这是有意义的。在决定程序的体系结构并定义可以使用接口执行的操作时,应做出这些决定。如果他们不希望从中派生出来,那么它不应该是虚拟的。如果他们确实希望从中派生它,那么它应该是虚拟的(并且它还应该使析构函数成为虚拟的(。

相关内容

最新更新