在C++中,继承方式(或继承访问权限)有三种:public、protected 和 private,它们决定了派生类(子类)对基类(父类)成员的访问权限,它们之间的区别如下:
public 继承:
当使用 public 继承时,基类的公有成员在派生类中仍然保持为公有成员,基类的保护成员在派生类中变为保护成员,基类的私有成员在派生类中不可访问。
派生类的对象可以访问基类的公有成员,但不能访问基类的私有成员。
public 继承用于表示派生类是一个基类的特化,派生类的对象可以被当作基类的对象来使用。
protected 继承:
当使用 protected 继承时,基类的公有和保护成员在派生类中都变为保护成员,基类的私有成员在派生类中不可访问。
派生类的对象可以访问基类的保护成员,但不能访问基类的公有成员或私有成员。
protected 继承用于表示派生类是一个基类的实现细节,并不希望外部使用者直接访问基类的接口。
private 继承:
当使用 private 继承时,基类的公有和保护成员在派生类中都变为私有成员,基类的私有成员在派生类中不可访问。
派生类的对象不能访问基类的公有、保护或私有成员。
private 继承用于表示派生类是一个基类的实现细节,但不希望派生类公开任何基类的接口,通常用于实现细节的隐藏。
下面是一个示例来说明这些概念:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class PublicDerived : public Base {
// publicMember 在这里是公有的
// protectedMember 在这里是保护的
// privateMember 在这里不可访问
};
class ProtectedDerived : protected Base {
// publicMember 在这里是保护的
// protectedMember 在这里是保护的
// privateMember 在这里不可访问
};
class PrivateDerived : private Base {
// publicMember 在这里是私有的
// protectedMember 在这里是私有的
// privateMember 在这里不可访问
};
总之,不同的继承方式决定了派生类如何继承基类的成员以及外部代码对这些成员的可见性。选择合适的继承方式取决于你的设计需求和目标。