在C++中,类的继承访问权限主要有三种:public(公有)、protected(保护)和private(私有)。这些访问权限决定了基类成员在派生类中的可见性。
Public(公有)继承: 当一个类公开继承另一个类时,基类的公有成员和保护成员在派生类中都保持公有,而基类的私有成员在派生类中不可访问。这意味着派生类的用户可以访问基类的公有和保护成员,但不能访问私有成员。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : public Base {
public:
void accessMembers() {
publicMember = 10; // 可以访问
protectedMember = 20; // 可以访问
// privateMember = 30; // 错误!无法访问基类的私有成员
}
};
Protected(保护)继承: 当一个类保护继承另一个类时,基类的公有成员和保护成员在派生类中都变为保护成员,而基类的私有成员仍然不可访问。这意味着派生类的用户不能访问基类的公有成员,但可以访问保护成员。派生类的成员函数可以访问基类的公有和保护成员。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : protected Base {
public:
void accessMembers() {
// publicMember = 10; // 错误!无法访问基类的公有成员
protectedMember = 20; // 可以访问
// privateMember = 30; // 错误!无法访问基类的私有成员
}
};
Private(私有)继承: 当一个类私有继承另一个类时,基类的公有成员和保护成员在派生类中都变为私有成员,而基类的私有成员仍然不可访问。这意味着派生类的用户不能访问基类的任何成员(公有、保护或私有)。派生类的成员函数可以访问基类的公有和保护成员,但不能访问私有成员。
示例:
class Base {
public:
int publicMember;
protected:
int protectedMember;
private:
int privateMember;
};
class Derived : private Base {
public:
void accessMembers() {
// publicMember = 10; // 错误!无法访问基类的公有成员
// protectedMember = 20; // 错误!无法访问基类的保护成员
// privateMember = 30; // 错误!无法访问基类的私有成员
}
};
总之,C++类的继承访问权限允许您控制基类成员在派生类中的可见性。公有继承使得基类成员在派生类中保持公有,保护继承使得基类成员在派生类中变为保护成员,而私有继承使得基类成员在派生类中变为私有成员。