C++派生类如何将基类私有成员方法暴露为自身公共方法
问题解决:C++如何将基类私有方法在派生类中暴露为公共方法
错误原因
C++访问控制规则规定:基类的private私有成员对派生类完全不可见,你无法在派生类中直接引用基类的私有成员,因此using message::removeMessage声明会因为找不到可访问的目标方法,触发C2876编译错误。
正确实现方式
你需要先将基类中对应方法的访问权限修改为protected(受保护成员仅对基类自身、派生类可见,对外不可见),再通过using声明将其提升到派生类的public公共区域即可。
修改后代码示例
#include <string> using namespace std; class message { public: virtual void setMessage(const string& name, const int& age, const string& title) const; virtual void getMessage(const string& name) const; // 将原private改为protected protected: void removeMessage(const string& name); }; class test : public message { public: // 此时using声明可正常生效,将基类protected方法提升为派生类public方法 using message::removeMessage; }; int main() { test t; t.removeMessage("_"); // 可正常调用 while (1); return 0; }
注意事项
- 如果无法修改基类的访问权限,你没有办法在派生类中访问基类的私有方法,也无法对外暴露该方法,C++的访问控制规则不允许这种绕过权限的操作。
using声明仅修改该成员在派生类中的访问权限,不会改变基类原有的成员访问控制,基类的removeMessage仍然是受保护成员,无法直接通过基类实例调用。
内容的提问来源于stack exchange,提问作者D K
相关产品推荐
相关产品推荐

