继承方式
在C++中,有三种主要的继承方式:公有继承(public inheritance)、私有继承(private inheritance)、保护继承(protected inheritance)。每种继承方式都有其特定的访问权限规则和使用场景。
1. 公有继承(public inheritance)
-
知识点:
-
派生类继承基类的公有成员和保护成员,但不继承基类的私有成员。
-
公有继承关系中,基类的公有成员和保护成员在派生类中的访问权限保持不变,即公有成员在派生类中仍然是公有的,保护成员在派生类中仍然是保护的。
-
用于实现"is-a"关系,即派生类对象可以看作是基类对象,支持多态性。
-
代码示例:
// 基类
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
// 公有继承示例
class DerivedPublic : public Base {
public:
void accessBaseMembers() {
publicMember = 1; // 可以访问基类的公有成员
protectedMember = 2; // 可以访问基类的保护成员
// privateMember = 3; // 私有成员在派生类中不可访问
}
};
2. 私有继承(private inheritance)
-
知识点:
-
派生类继承基类的公有成员和保护成员,但它们都变成了私有成员。
-
私有继承会隐藏基类的所有成员,只有派生类自己可以访问这些成员。
-
用于实现"has-a"关系,派生类包含一个基类对象作为其一部分,但外界不可访问基类的接口。
-
代码示例:
// 私有继承示例
class DerivedPrivate : private Base {
public:
void accessBaseMembers() {
publicMember = 1; // 可以访问基类的公有成员(在派生类中变为私有)
protectedMember = 2; // 可以访问基类的保护成员(在派生类中变为私有)
// privateMember = 3; // 私有成员在派生类中不可访问
}
};
3. 保护继承(protected inheritance)
-
知识点:
-
派生类继承基类的公有成员和保护成员,但它们都变成了保护成员。
-
保护继承的效果类似于私有继承,但派生类的成员函数可以访问基类的接口。
-
用于限制外界对基类接口的访问,派生类和其子类可以访问基类的接口。
-
代码示例:
// 保护继承示例
class DerivedProtected : protected Base {
public:
void accessBaseMembers() {
publicMember = 1; // 可以访问基类的公有成员(在派生类中变为保护成员)
protectedMember = 2; // 可以访问基类的保护成员(在派生类中变为保护成员)
// privateMember = 3; // 私有成员在派生类中不可访问
}
};