2

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

4

3 回答 3

9

是的,你有。

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

于 2010-09-17T08:15:12.583 回答
2

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

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

于 2010-09-17T08:38:32.713 回答
1

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

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

于 2010-09-17T08:16:08.673 回答