C++继承类如何在cpp文件实现基类protected成员函数?
解决C++派生类实现自定义TestFunction的问题
先看你给出的原代码:
原基类base.h代码
class BaseClass { public: class BaseClass (); // 存在语法错误 protected: void TestFunction(); } // 缺少类定义结尾的分号
原派生类inheritingclass.h代码
#include "base.h" class InheritingClass : public BaseClass { public: class InheritingClass (); // 同样存在语法错误 } // 缺少分号
你现在想在inheritingclass.cpp中编写InheritingClass::TestFunction()的实现,让它被识别为派生类自己的函数,需要做以下修改:
1. 修正构造函数的语法错误
原代码里构造函数前多写了class关键字,这是C++语法错误,必须删掉;同时类定义结尾必须加分号,否则编译会报错。
2. 在派生类中显式声明TestFunction
要让TestFunction成为派生类的成员函数,必须在派生类的类声明中先声明它——否则编译器会认为你是要定义基类的TestFunction,但基类的这个函数是protected权限,你无权在派生类外部直接定义基类的成员函数。如果是要重写基类的同名函数,推荐加上override关键字(C++11及以后支持),能避免函数签名不匹配的隐性错误。
修改后的完整代码
修正后的base.h
class BaseClass { public: BaseClass(); // 去掉多余的class关键字 protected: void TestFunction(); }; // 加上类结尾的分号
修正后的inheritingclass.h
#include "base.h" class InheritingClass : public BaseClass { public: InheritingClass(); // 去掉多余的class关键字 protected: // 也可改成public,根据你需要的访问权限调整 void TestFunction() override; // 在派生类中声明该函数,override可选但推荐 };
可正常编译的inheritingclass.cpp
#include "inheritingclass.h" // 现在编译器会识别这是派生类的TestFunction实现 InheritingClass::TestFunction() { // 你的业务代码 } // 别忘了实现派生类的构造函数 InheritingClass::InheritingClass() { // 构造函数逻辑 }
补充说明
- 如果你只是想重写基类的
TestFunction,上述修改就足够了;如果是想让派生类拥有一个同名的全新函数(而非重写),可以不用加override,但这种写法容易造成混淆,不推荐。 - 基类的
TestFunction是protected权限,派生类继承后默认保留该权限,你可以根据需求调整派生类中该函数的访问级别。
内容的提问来源于stack exchange,提问作者user22502145
相关产品推荐
相关产品推荐

