当前位置:首页 > C++ > 正文

C++访问权限继承详解(掌握public、protected、private在继承中的作用)

在C++面向对象编程中,访问权限继承是理解类之间关系的关键。很多初学者对 publicprotectedprivate 在继承时的行为感到困惑。本文将用通俗易懂的方式,带你彻底搞懂 C++访问权限继承 的规则,并通过示例代码加深理解。

什么是访问权限?

在C++中,类的成员可以有三种访问权限:

  • public:任何地方都可以访问。
  • protected:只有本类及其派生类可以访问。
  • private:仅本类内部可以访问,派生类也不能访问。
C++访问权限继承详解(掌握public、protected、private在继承中的作用) C++访问权限继承  C++继承权限 C++ public protected private C++面向对象编程 第1张

继承时的访问权限变化

当一个类从另一个类继承时,基类成员在派生类中的访问权限会根据继承方式发生变化。C++提供了三种继承方式:publicprotectedprivate 继承。

下表总结了不同继承方式下,基类成员在派生类中的访问权限变化(假设基类成员原始权限为 X):

基类成员权限 public 继承 protected 继承 private 继承
public public protected private
protected protected protected private
private 不可访问 不可访问 不可访问

代码示例:三种继承方式对比

下面我们通过一个完整的例子来演示不同继承方式对访问权限的影响。

#include <iostream>using namespace std;// 基类class Base {public:    int publicVar = 1;protected:    int protectedVar = 2;private:    int privateVar = 3; // 派生类无法直接访问};// 公有继承class DerivedPublic : public Base {public:    void accessMembers() {        cout << "publicVar (public继承): " << publicVar << endl;        cout << "protectedVar (public继承): " << protectedVar << endl;        // cout << privateVar; // 错误!private成员不可访问    }};// 保护继承class DerivedProtected : protected Base {public:    void accessMembers() {        cout << "publicVar (protected继承): " << publicVar << endl;        cout << "protectedVar (protected继承): " << protectedVar << endl;    }};// 私有继承class DerivedPrivate : private Base {public:    void accessMembers() {        cout << "publicVar (private继承): " << publicVar << endl;        cout << "protectedVar (private继承): " << protectedVar << endl;    }};int main() {    DerivedPublic dp;    dp.publicVar = 10; // ✅ OK,public继承保持public    // dp.protectedVar = 20; // ❌ 错误,protected不能在类外访问    DerivedProtected dpro;    // dpro.publicVar = 10; // ❌ 错误!publicVar在protected继承下变为protected    DerivedPrivate dpr;    // dpr.publicVar = 10; // ❌ 错误!publicVar在private继承下变为private    dp.accessMembers();    dpro.accessMembers();    dpr.accessMembers();    return 0;}  

关键要点总结

  • public继承 是最常用的继承方式,它“保持”基类的访问权限不变,符合“is-a”关系(如:Dog is a Animal)。
  • protected/private继承 通常用于实现细节复用,不表示“is-a”关系,而是“implemented-in-terms-of”。
  • 无论哪种继承方式,基类的 private 成员在派生类中都不可直接访问
  • 选择合适的继承方式,有助于封装和设计更安全的类层次结构,这是 C++面向对象编程 的核心思想之一。

结语

掌握 C++继承权限 的规则,不仅能写出更规范的代码,还能避免常见的访问错误。记住:默认继承方式在 class 中是 private,而在 struct 中是 public

希望这篇教程能帮你彻底理解 C++访问权限继承!动手写一写上面的代码,你会理解得更深刻。