Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中纯虚方法的重新定义+;_C++_Oop_Pure Virtual - Fatal编程技术网

C++ C+中纯虚方法的重新定义+;

C++ C+中纯虚方法的重新定义+;,c++,oop,pure-virtual,C++,Oop,Pure Virtual,是否必须声明替换基类中纯虚函数的方法?若然,原因为何?由于基类已将这些方法声明为纯虚拟的,因此必须存在于派生类中,因此在可以在类定义之外实现它们之前,不必在派生类中重新声明它们。你不同意吗?是的,你同意 这样做的原因是让编译器知道虚拟方法是由派生类实现的,因为派生类也可以是抽象的,并且具有虚拟方法。由于编译单元是单独编译的,因此在编译另一个使用派生CALS的编译单元时,编译器将不知道虚拟方法是否由派生类实现,因此也不知道它是否是抽象类。名称所述的类定义就是类的声明。如果不声明派生函数(来自纯虚拟

是否必须声明替换基类中纯虚函数的方法?若然,原因为何?由于基类已将这些方法声明为纯虚拟的,因此必须存在于派生类中,因此在可以在类定义之外实现它们之前,不必在派生类中重新声明它们。你不同意吗?

是的,你同意


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

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


只有在实例化类时,才必须派生纯虚拟函数。您可以使用纯虚函数a类a、继承自类a但没有派生函数的类B,然后是继承自类B并重新实现派生函数的类C。在这种情况下,只能实例化类C,所以为什么编译器应该在类B中添加派生类的声明呢?这就是为什么您必须向编译器指示哪个类正在重新实现纯虚拟函数。

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


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

这正是语言的定义方式,所以最好习惯它:-)顺便说一句,它可能不存在于派生类中,以防它也是“抽象的”。我相信这是一个重复,如果我找到了原始的,我会链接它…替换->应该更好地被覆盖(OOP行话)