| 基類成員 原屬性 | 衍生類成員訪問權限 | 衍生類物件訪問權限 | ||||
|---|---|---|---|---|---|---|
| public 繼承 | protected 繼承 | private 繼承 | public 繼承 | protected 繼承 | private 繼承 | |
| public | public | protected | private | ✅ 可訪問 | ❌ 不可 | ❌ 不可 |
| protected | protected | protected | private | ❌ 不可 | ❌ 不可 | ❌ 不可 |
| private | 不可見 | 不可見 | 不可見 | ❌ 不可 | ❌ 不可 | ❌ 不可 |
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;*/ // 全部不可存取
}
using Base::member 在衍生類中調整特定成員的可見性。