前言
在C++中,访问控制修饰符(Access Control Modifiers)用于控制类的成员(成员变量和成员函数)的访问权限。这些修饰符分为三种:public、protected和private。它们定义了成员可以在何处访问,具体如下:
public:
public成员在类内部和外部都是可访问的。
这意味着任何地方都可以直接访问类的public成员。
protected:
protected成员在类内部可访问,但在类外部是不可访问的。
子类(派生类)可以访问其父类的protected成员。
private:
private成员只能在类的内部访问,对外部是隐藏的。
不能被类的子类访问。
下面是一个示例,说明这些访问控制修饰符的使用:
#include <iostream>
class MyClass {
public:
int publicVar; // public 成员
void PublicMethod() {
std::cout << "Public method." << std::endl;
}
protected:
int protectedVar; // protected 成员
void ProtectedMethod() {
std::cout << "Protected method." << std::endl;
}
private:
int privateVar; // private 成员
void PrivateMethod() {
std::cout << "Private method." << std::endl;
}
};
// 上面 三种权限在这个类里面都是可以访问的
class MyDerivedClass : public MyClass {
public:
void AccessProtected() {
protectedVar = 42; // 子类可以访问父类的 protected 成员
ProtectedMethod(); // 子类可以调用父类的 protected 方法
}
};
int main() {
MyClass myObj;
myObj.publicVar = 10; // 可以直接访问 public 成员
myObj.PublicMethod(); // 可以调用 public 方法
// 下面的代码无法通过编译,因为 protectedVar 和 ProtectedMethod 是 protected 的
// myObj.protectedVar = 20;
// myObj.ProtectedMethod();
MyDerivedClass derivedObj;
derivedObj.AccessProtected(); // 子类可以访问 protected 成员和方法
return 0;
}
总结起来,访问控制修饰符允许你控制类的成员对外部的可见性和可访问性,从而实现封装的概念,隐藏类的内部实现细节并提供合适的访问接口。