在C++中,类的成员可以根据其访问权限被分为三种类型:公有成员(public)、保护成员(protected)和私有成员(private)。这些访问权限控制符决定了类成员在类的内部和外部的可访问性。
公有成员(public)
公有成员在类的内部和外部都是可访问的。这意味着公有成员可以被类的对象、类的成员函数以及类的友元函数访问。
class MyClass {
public:
int publicVar; // 公有成员变量
void publicFunc() { // 公有成员函数
// 可以访问公有成员、保护成员和私有成员
}
};
保护成员(protected)
保护成员在类的内部和继承自该类的派生类中是可访问的,但在类的外部是不可访问的。这意味着保护成员可以被类的成员函数、派生类的成员函数以及类的友元函数访问,但不能被类的对象访问。
class MyClass {
protected:
int protectedVar; // 保护成员变量
void protectedFunc() { // 保护成员函数
// 可以访问公有成员、保护成员和私有成员
}
};
class DerivedClass : public MyClass {
public:
void accessProtected() {
protectedVar = 10; // 派生类中可以访问基类的保护成员
}
};
私有成员(private)
私有成员仅在类的内部是可访问的。这意味着私有成员只能被类的成员函数和类的友元函数访问,不能被类的对象或派生类的成员函数访问。
class MyClass {
private:
int privateVar; // 私有成员变量
void privateFunc() { // 私有成员函数
// 可以访问公有成员、保护成员和私有成员
}
};
class DerivedClass : public MyClass {
public:
void tryAccessPrivate() {
// privateVar = 10; // 错误,派生类中不能访问基类的私有成员
}
};
访问权限对继承的影响
当类被继承时,访问权限会影响派生类对基类成员的访问能力:
- 公有继承(public):基类的公有成员在派生类中保持公有,基类的保护成员在派生类中保持保护,基类的私有成员不可访问。
- 保护继承(protected):基类的公有成员和保护成员在派生类中都变为保护,基类的私有成员不可访问。
- 私有继承(private):基类的公有成员和保护成员在派生类中都变为私有,基类的私有成员不可访问。
示例
class Base {
public:
int publicVar;
protected:
int protectedVar;
private:
int privateVar;
};
class Derived : public Base {
public:
void accessBaseMembers() {
publicVar = 10; // 正确,公有成员可访问
protectedVar = 20; // 正确,保护成员在派生类中可访问
// privateVar = 30; // 错误,私有成员不可访问
}
};
int main() {
Derived d;
d.publicVar = 10; // 正确,公有成员可访问
// d.protectedVar = 20; // 错误,保护成员不可在类外访问
// d.privateVar = 30; // 错误,私有成员不可访问
return 0;
}
在这个示例中,Derived
类公有继承自Base
类。因此,Derived
类的对象可以访问Base
类的公有成员,但不能访问其保护成员和私有成员。在Derived
类的成员函数中,可以访问基类的公有成员和保护成员,但不能访问私有成员。