C++权限对继承的影响

张开发
2026/4/15 0:10:47 15 分钟阅读

分享文章

C++权限对继承的影响
C权限对继承的影响在C中继承权限public、protected、private决定了基类成员在派生类中的访问级别。继承权限与基类成员的原始访问修饰符共同作用形成最终的访问规则。基类成员的原始访问权限public成员在类内外均可访问。protected成员仅在类内和派生类中可访问。private成员仅在类内可访问派生类不可见。继承权限的作用继承权限会限制派生类对基类成员的访问上限公有继承public基类的public和protected成员在派生类中保持原权限。classBase{public:intx;protected:inty;private:intz;};classDerived:publicBase{// x: public, y: protected, z: 不可访问};保护继承protected基类的public和protected成员在派生类中均变为protected。classDerived:protectedBase{// x: protected, y: protected, z: 不可访问};私有继承private基类的public和protected成员在派生类中均变为private。classDerived:privateBase{// x: private, y: private, z: 不可访问};权限访问规则总结派生类内部访问权限由继承权限和基类成员的原始权限共同决定。基类的private成员始终不可访问。继承权限会降低基类public/protected成员的最高访问级别。派生类外部只能通过派生类的对象访问基类的public成员仅限公有继承。Derived d;d.x;// 仅当继承为public且x在基类为public时合法多级继承权限会逐层叠加限制。例如若A私有继承BC公有继承A则B的成员在C中均为private。示例代码classBase{public:inta;protected:intb;private:intc;};// 公有继承classPublicDerived:publicBase{voidfoo(){a1;// OK: publicb2;// OK: protected// c 3; // 错误: private不可访问}};// 保护继承classProtectedDerived:protectedBase{voidfoo(){a1;// OK: 变为protectedb2;// OK: protected// c 3; // 错误}};// 私有继承classPrivateDerived:privateBase{voidfoo(){a1;// OK: 变为privateb2;// OK: 变为private// c 3; // 错误}};注意事项默认继承权限class默认为privatestruct默认为public。权限不影响内存布局仅影响语法层面的访问控制。使用using可以调整特定成员的访问权限需符合原始权限规则。

更多文章