【问题标题】:Redefinition of pure virtual methods in C++在 C++ 中重新定义纯虚方法
【发布时间】:2010-09-17 08:06:36
【问题描述】:

您是否必须在基类中声明替换纯虚函数的方法?如果是这样,为什么?由于基类已将方法声明为纯虚拟方法,因此必须存在于派生类中,因此不必在派生类中重新声明它们,然后才能在类定义之外实现它们。你不同意吗?

【问题讨论】:

  • 这只是语言的定义方式,所以最好习惯它:-) 顺便说一句,如果它也是“抽象”的,它可能不存在于派生类中。我相信这是一个骗子,如果我找到原件,我会链接它......
  • 替换 -> 最好被覆盖(OOP 术语)

标签: c++ oop pure-virtual


【解决方案1】:

是的,你有。

这样做的原因是让编译器知道虚拟方法是由派生类实现的,因为派生类也可以是抽象的并且具有虚拟方法。由于编译单元是分开编译的,否则编译器在编译另一个使用派生类的编译单元时,将不知道派生类是否实现了虚方法,从而不知道它是否是抽象类。

【讨论】:

    【解决方案2】:

    您不必重写基类的声明。如果你不这样做,派生类也只是抽象的。

    因此,派生类中的声明有明确的用途,您需要它。

    【讨论】:

      【解决方案3】:

      类定义顾名思义就是类的声明。如果你没有声明派生函数(来自纯虚函数),编译器将找不到它。

      只有当你的类将被实例化时,你才必须派生纯虚函数。您可以将纯虚函数设置为 A 类,从 A 类继承但没有派生函数的 B 类,然后从 B 类继承并重新实现派生函数的 C 类。在那种情况下,只能实例化 C 类,那么为什么编译器要在 B 类中添加派生类的声明呢?这就是为什么你必须向编译器指出哪个类正在重新实现纯虚函数。

      【讨论】:

        猜你喜欢
        • 2016-06-23
        • 1970-01-01
        • 2011-09-08
        • 2011-06-24
        • 2020-11-20
        • 2011-07-10
        • 1970-01-01
        • 1970-01-01
        • 2015-05-01
        相关资源
        最近更新 更多