首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C++ 繼承存取控制完整解析:public/private/protected 三種模式差異

     編輯:關於C語言

三種繼承方式對比表

基類成員
原屬性
衍生類成員訪問權限衍生類物件訪問權限
public 繼承protected 繼承private 繼承public 繼承protected 繼承private 繼承
publicpublicprotectedprivate✅ 可訪問❌ 不可❌ 不可
protectedprotectedprotectedprivate❌ 不可❌ 不可❌ 不可
private不可見不可見不可見❌ 不可❌ 不可❌ 不可

核心規則口訣

  • public 繼承:「is-a」關係,保持原屬性,衍生類物件可存取 public 介面。
  • protected 繼承:基類 public/protected 變為 protected,衍生類可存取,物件不可存取。
  • private 繼承:基類 public/protected 變為 private,衍生類可存取,物件完全不可存取(實作繼承/介面隱藏)。
  • 基類 private 成員:永遠不可見(除非基類提供 public/protected 介面),與繼承方式無關。

成員屬性語意比喻

  • public:公共資產,誰都能用。
  • protected:家族遺產,子孫(衍生類)能用,外人不能。
  • private:私人財產,只有自己能用。
  • friend:死黨,沒有秘密,想用就用。

程式碼驗證範例

class Base {
public: int pub;
protected: int pro;
private: int pri;
};

class PubDerived : public Base { void f() { pub=1; pro=2; /*pri=3;*/ } };
class ProDerived : protected Base { void f() { pub=1; pro=2; /*pri=3;*/ } };
class PriDerived : private Base { void f() { pub=1; pro=2; /*pri=3;*/ } };

int main() {
    PubDerived d1; d1.pub=1; /*d1.pro=2; d1.pri=3;*/ // 僅 pub 可存取
    ProDerived d2; /*d2.pub=1;*/ // 全部不可存取
    PriDerived d3; /*d3.pub=1;*/ // 全部不可存取
}

設計建議

  1. 預設使用 public 繼承 表達「is-a」語意。
  2. 需「has-a」或實作細節復用時,優先考慮組合而非 private 繼承。
  3. protected 繼承極少用,通常僅在框架設計中「受保護介面」需求時出現。
  4. 善用 using Base::member 在衍生類中調整特定成員的可見性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved