能否将基类的private成员继承为派生类的public成员
首先,C++ 语法不支持直接将基类的 private 成员继承为派生类的 public 成员。
首先明确两个基础规则:
- C++ 继承方式共有三种,除了你提到的
public继承、private继承之外,还有protected继承,所有继承方式只会调整基类中非private成员在派生类中的访问权限上限,不会修改基类私有成员的可见性。 - 基类的
private成员对所有派生类都完全不可见,不管使用哪种继承方式,派生类内部都无法直接访问基类的private成员,自然也无法修改其访问权限后对外暴露。
如果你的需求是将基类中可被派生类访问的成员(原本为 protected 权限,或者你可以修改基类代码调整成员权限),在派生类中升级为 public 权限对外暴露,可以通过 using 声明实现,操作步骤如下:
- 步骤1:修改基类需要暴露的成员的访问权限为
protected(仅当你可以修改基类代码时操作) - 步骤2:派生类使用
public方式继承基类 - 步骤3:在派生类的
public作用域中添加using声明,指定要提升权限的基类成员
示例代码:
#include <iostream> class Base { protected: int num = 10; void print() { std::cout << "Base print" << std::endl; } }; class Derived : public Base { public: // 将基类的protected成员提升为派生类的public成员 using Base::num; using Base::print; }; int main() { Derived d; std::cout << d.num << std::endl; // 可正常访问 d.print(); // 可正常调用 return 0; }
如果不能修改基类代码,且基类的 private 成员没有提供任何 public/protected 访问接口,那么没有合法方式可以在派生类中访问或暴露该成员。如果基类提供了对应的访问接口,可以在派生类中封装一层 public 方法间接访问:
#include <iostream> class Base { private: int num = 10; public: int get_num() const { return num; } void set_num(int n) { num = n; } }; class Derived : public Base { public: // 封装一层public接口对外暴露 int num() const { return get_num(); } void num(int n) { set_num(n); } }; int main() { Derived d; std::cout << d.num() << std::endl; d.num(20); std::cout << d.num() << std::endl; return 0; }
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

