C++继承场景下子类实例无法访问父类public成员报错咨询
报错原因
C++ 中使用class关键字定义的类,默认继承方式为private私有继承。你代码中class Developer:Employee没有显式声明继承类型,会自动采用私有继承规则:
- 父类所有
public、protected成员在子类中都会被转为private访问权限 - 子类内部可以访问这些继承来的私有成员,所以你在
print_name方法内访问name不会报错 - 类外部(比如
main函数中)无法访问对象的私有成员,所以d.name调用触发权限报错
而favproglang是你在子类的public块里显式声明的属性,所以外部可以正常访问。
解决方法
方法1:显式指定公有继承
如果你的业务场景需要子类外部可以正常访问父类的公有成员,把继承声明修改为:
class Developer: public Employee { // 原有类逻辑不变 };
公有继承会保留父类成员的原有访问权限,父类的public成员在子类中依然是public,外部可以正常访问。
方法2:单独提升指定成员的访问权限
如果你确实需要使用私有继承,只希望开放name这一个成员的外部访问权限,可以在子类的public块中添加using声明:
class Developer:Employee { public: string favproglang; using Employee::name; // 把继承来的name权限提升为public // 原有类逻辑不变 };
内容的提问来源于stack exchange,提问作者Turing101
相关产品推荐
相关产品推荐

