1. public 继承
- 访问权限:基类的 public 成员在派生类中仍是 public 的,protected 成员在派生类中仍是 protected 的,private 成员在派生类中不可访问。
- 示例代码:
class Base {
public:
int publicData;
protected:
int protectedData;
private:
int privateData;
};
class PublicDerived : public Base {
public:
void accessMembers() {
publicData = 10; // 正确,public 成员在派生类中可访问
protectedData = 20; // 正确,protected 成员在派生类中可访问
// privateData = 30; // 错误,private 成员在派生类中不可访问
}
};
2. private 继承
- 访问权限:基类的 public 和 protected 成员在派生类中都变成 private 的,private 成员在派生类中不可访问。
- 示例代码:
class PrivateDerived : private Base {
public:
void accessMembers() {
publicData = 10; // 正确,虽然基类 public 成员在派生类变为 private,但在类内可访问
protectedData = 20; // 正确,基类 protected 成员在派生类变为 private,在类内可访问
// privateData = 30; // 错误,private 成员在派生类中不可访问
}
};
// 在类外使用 PrivateDerived
// PrivateDerived pd;
// pd.publicData = 10; // 错误,public 成员在派生类中变为 private,类外不可访问
3. protected 继承
- 访问权限:基类的 public 和 protected 成员在派生类中都变成 protected 的,private 成员在派生类中不可访问。
- 示例代码:
class ProtectedDerived : protected Base {
public:
void accessMembers() {
publicData = 10; // 正确,基类 public 成员在派生类变为 protected,在类内可访问
protectedData = 20; // 正确,基类 protected 成员在派生类仍为 protected,在类内可访问
// privateData = 30; // 错误,private 成员在派生类中不可访问
}
};
class FurtherDerived : public ProtectedDerived {
public:
void accessMembers() {
publicData = 10; // 正确,基类 public 成员经 protected 继承后在 FurtherDerived 中是 protected 的,在类内可访问
protectedData = 20; // 正确,基类 protected 成员经 protected 继承后在 FurtherDerived 中是 protected 的,在类内可访问
}
};