[C++] 公有,保护和私有继承
程序员文章站
2022-03-08 20:21:40
...
1. public, protected, private:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
// 任何code 都可以访问 publicMember
// 仅子类 (以及子类的子类) 可以访问 protectedMember
// 除了Base 自己,任何 code 都无法访问 privateMember
2. public , protected 和 private inheritance:
假定有4个类,A, B, C, D:
class A
{
public:
int x;
protected:
int y;
private:
int z;
};
class B : public A
{
// x is public
// y is protected
// z is not accessible from B
};
class C : protected A
{
// x is protected
// y is protected
// z is not accessible from C
};
class D : private A // 'private' is default for classes
{
// x is private
// y is private
// z is not accessible from D
};
对类中继承而来的成员的访问由 基类成员的 access level + 派生类列表中的 access label 两者共同决定。
公有继承:在派生类中基类中的 public 仍为 public, protected 为 protected
保护继承:在派生类中基类中的public和protected都变为protected
私有继承:在派生类中基类中的成员在派生类中全部变为private。
class Base {
public:
void basemem(); // public member
protected:
int i; // protected member
// ...
};
struct Public_derived : public Base {
int use_base() { return i; } // ok: derived classes can access i
// ...
};
struct Private_derived : private Base {
int use_base() { return i; } // ok: derived classes can access i
};
最普遍使用的继承方式为 public.
3. 默认继承方式:struct 为 public, class 为 private
class Base { /* ... */ };
struct D1 : Base { /* ... */ }; // public inheritance by default
class D2 : Base { /* ... */ }; // private inheritance by default
由于私有继承的使用极为罕见,如要使用私有继承,应该写出 private 关键字,以明确表明是要使用私有继承,而不是疏忽忘了写。
[C++ primer 15.2] Difference between public, private, protected inheritance