目录
摘要
访问权限(Access Specifiers)
1. `private`
2. `protected`
3. `public`
友元函数(Friend Functions)
关键点
总结
摘要
C++中的访问权限(Access Specifiers -- private、protected、public)和友元函数(Friend Functions)是面向对象编程中的重要概念,用于控制类成员的可见性和访问权限。
访问权限(Access Specifiers)
在C++中,访问权限分为三种:`private`、`protected` 和 `public`,它们决定了成员在类的内部和外部的可见性和访问权限。
1. `private`
- `private` 访问权限将成员声明为私有,只有类的成员函数可以访问私有成员,外部代码无法直接访问。
- 私有成员对于类的用户是隐藏的,只能在类的成员函数内部访问。
class MyClass {
private:int privateMember; // 私有成员public:void setPrivateMember(int value) {privateMember = value; // 可以在类的成员函数中访问私有成员}
};
2. `protected`
- `protected` 访问权限将成员声明为受保护的,类的成员函数和派生类的成员函数可以访问受保护成员,但外部代码无法直接访问。
- 受保护成员对于类的用户是隐藏的,只能在类的成员函数和派生类的成员函数内部访问。
class MyClass {
protected:int protectedMember; // 受保护成员public:void setProtectedMember(int value) {protectedMember = value; // 可以在类的成员函数中访问受保护成员}
};
3. `public`
- `public` 访问权限将成员声明为公共的,类的成员函数、派生类的成员函数以及外部代码都可以访问公共成员。
- 公共成员对于类的用户是可见的,可以在任何地方访问。
class MyClass {
public:int publicMember; // 公共成员void setPublicMember(int value) {publicMember = value; // 可以在类的成员函数中访问公共成员}
};
4. 友元函数(Friend Functions)
- 友元函数是一个独立于类的非成员函数,但具有与类成员相同的访问权限。
- 友元函数可以访问类的私有成员、受保护成员和公共成员。
- 友元函数通常用于提供与类相关的功能,但这些功能不属于类的一部分。
class MyClass {
private:int privateMember; // 私有成员public:// 声明友元函数friend void friendFunction(MyClass& obj);MyClass(int value) : privateMember(value) {}int getPrivateMember() {return privateMember;}
};// 定义友元函数
void friendFunction(MyClass& obj) {// 可以访问类的私有成员std::cout << "Private member value: " << obj.privateMember << std::endl;
}int main() {MyClass obj(10);friendFunction(obj); // 输出 "Private member value: 10"return 0;
}
关键点
1. private:
- 用于隐藏类的内部实现细节,只有类的成员函数可以访问私有成员。
- 通常用于存储类的内部状态和实现细节,外部代码无法直接访问。
2. protected:
- 用于允许派生类访问基类的成员,但对于外部代码是隐藏的。
- 通常用于实现继承机制,派生类可以访问受保护成员以扩展基类的功能。
3. public:
- 用于提供类的接口,使得类的用户可以访问公共成员。
- 通常将类的操作和服务作为公共成员提供给外部代码。
4. 友元函数:
- 允许非成员函数访问类的私有成员和受保护成员。
- 可以提供类相关的功能,但这些功能不属于类的一部分。
总结
1. `private`、`protected` 和 `public` 是C++中的三种访问权限,用于控制类成员的可见性和访问权限。
2. `private` 成员只能被类的成员函数访问,`protected` 成员可以被派生类访问,`public` 成员可以被任何代码访问。
3. 友元函数可以访问类的私有成员和受保护成员,但它不是类的成员函数,也不受访问权限控制。
在实际应用中根据自己的需求进行类访问权限的控制,这样可以使得某些重要的代码或区域可以得到更好的保护。