c – 为什么我必须从继承的类重新声明虚函数?
发布时间:2020-12-16 03:23:51 所属栏目:百科 来源:网络整理
导读:我正在研究一个简单的C程序,并且很难理解我遇到的编译器错误.这个问题是由我尝试从基类创建派生类引起的.我在下面发布了相同结构的代码,但更改了名称. BaseClass.h #ifndef BASECLASS_H#define BASECLASS_Hclass BaseClass { public: BaseClass(void); virtu
我正在研究一个简单的C程序,并且很难理解我遇到的编译器错误.这个问题是由我尝试从基类创建派生类引起的.我在下面发布了相同结构的代码,但更改了名称.
BaseClass.h #ifndef BASECLASS_H #define BASECLASS_H class BaseClass { public: BaseClass(void); virtual int method1(void) = 0; virtual int method2(void) = 0; virtual float method3(void) = 0; }; #endif // BASECLASS_H DerivedClass.h #ifndef DERIVEDCLASS_H #define DERIVEDCLASS_H #include "DerivedClass.h" class DerivedClass: public BaseClass { public: DerivedClass(void); }; #endif // DERIVEDCLASS_H DerivedClass.cpp #include "DerivedClass.h" DerivedClass::DerivedClass(void) { } int DerivedClass::method1(void) { // TODO } int DerivedClass::method2(void) { // TODO } float DerivedClass::method3(void) { // TODO } 尝试编译时,我得到所有虚拟方法的以下错误: no 'int DerivedClass::methodX()' member function declared in class 'DerivedClass' 一旦我在’DerivedClass.h’中声明这些方法,错误就会消失,因为编译器现在知道这些方法. 但是,我很困惑.为什么有必要在DerivedClass.h中重新声明纯虚函数?当我#include DerivedClass.h时,它将自动包含BaseClass.h,因此我假设我的DerivedClass.cpp应该完全了解这些方法.我做错了吗? 解决方法
它没有这种方式.您需要声明要定义的方法,无论它们是否覆盖虚拟方法.
这不仅仅是语言的无理要求.如果没有这个,您将无法定义部分虚拟类,即,您可以使BaseSubtype具有method1()的通用实现,但需要从其派生的类来实现method2()和method3() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |