| 繼承方式 | 基類 public | 基類 protected | 基類 private | 派生類對象訪問 |
|---|---|---|---|---|
| 公有繼承 | public | protected | 不可見 | 僅 public |
| 私有繼承 | private | private | 不可見 | 全部不可見 |
| 保護繼承 | protected | protected | 不可見 | 全部不可見 |
class O {
private: void F1() { cout << "F1 private\n"; }
public: void F2() { cout << "F2 public\n"; }
protected: void F3() { cout << "F3 protected\n"; }
};
class P : protected O { // 保護繼承
public: void test() { F2(); F3(); /* F1(); // error */ }
};
class Q : public O { // 公有繼承
public: void test() { F2(); F3(); /* F1(); // error */ }
};
int main() {
P p; Q q;
p.test(); // 輸出 F2 public, F3 protected
q.test(); // 輸出 F2 public, F3 protected
q.F2(); // OK: 公有繼承對象可訪問 public
// p.F2(); // Error: 保護繼承對象不可訪問
}
已知類 O 有 private F1、public F2、protected F3。P 保護繼承 O,Q 公有繼承 O。
繼承規則對成員函數和成員變量完全一致,代碼驗證見文中完整示例。