一、类的封装 : 访问控制权限
1、访问控制权限
在 C 语言中 , 类的成员 的 " 访问控制权限 " 是通过 " 访问修饰符 " 指定的 ;
- 类的 成员属性 和 成员方法 都可以 设置 访问控制权限 , 都可以被 访问修饰符 所修饰 ;
C 语言 提供了 3 种 访问修饰符 :
- public : 修饰的 成员变量 和 成员函数 , 是 公开的 , 可以在任何地方访问 , 在 类的内部 和 类的外部 都可以访问 ;
- protected : 修饰的 成员变量 和 成员函数 , 是 受保护的 , 只能在 类的内部 和 子类的内部 访问 ;
- private : 修饰的 成员变量 和 成员函数 , 是 私有的 , 只能在 类的内部 访问 ;
2、类的内部 和 类的外部 概念
在上面的 访问控制权限 中 , 涉及到了 类的内部 和 类的外部 两种范围 ;
- 类的内部 : 指的是定义的 class 类的大括号 { } 范围内 ;
- 类的外部 : 指的是定义的 class 类的大括号 { } 范围之外的代码 ;
被 private 修饰的 类 的 成员属性 和 成员方法 , 只能在 类内部 , 也就是 class 类的大括号 { } 范围内 被访问到 ;
一旦出了类 , 类中的 private 成员 和 protected 成员 便不能被访问到 ;
示例代码分析 :
- 在 类的内部 , 可以访问所有的 3 种成员变量 ,
- 在 类的外部 , 只能访问 publicVar 成员变量 ,
- 还有一种特殊情况 , 就是在 MyClass 子类的内部 , 可以访问 protectedVar 成员变量 , 该 protectedVar 成员变量不能在 类的外部 访问 , 只能在 类的内部 或 子类的内部 被访问到 ;
// 定义类 : 通过 访问修饰符 测试 类的 访问控制权限
class MyClass {
public:
int publicVar; // 公开成员变量
protected:
int protectedVar; // 受保护成员变量
private:
int privateVar; // 私有成员变量
};
3、默认访问控制权限
如果变量没有指定 访问修饰符 , 那么 默认的访问控制权限 是 私有的 , 默认被 private 修饰 ;
代码语言:javascript复制// 定义类 : 通过 访问修饰符 测试 类的 访问控制权限
class MyClass {
int defaultVar; // 默认成员变量 - 私有成员变量
public:
int publicVar; // 公开成员变量
protected:
int protectedVar; // 受保护成员变量
private:
int privateVar; // 私有成员变量
};
二、代码示例 - 访问控制权限
1、错误代码示例 - 类的 访问控制权限
错误代码示例 :
代码语言:javascript复制// 包含 C 头文件
#include "iostream"
// 使用 std 标准命名空间
// 该命名空间中 , 定义了很多标准定义
using namespace std;
// 定义类 : 通过 访问修饰符 测试 类的 访问控制权限
class MyClass {
int defaultVar; // 默认成员变量 - 私有成员变量
public:
int publicVar; // 公开成员变量
protected:
int protectedVar; // 受保护成员变量
private:
int privateVar; // 私有成员变量
};
int main()
{
// 定义类对象
MyClass obj;
// 访问类的 公开成员变量
obj.publicVar = 10;
// 访问类的 私有成员变量
obj.privateVar = 10;
// 访问类的 受保护成员变量
obj.protectedVar = 10;
// 访问类的 默认类型成员变量
obj.defaultVar = 10;
// 控制台暂停 , 按任意键继续向后执行
system("pause");
return 0;
}
执行结果 :
代码语言:javascript复制已启动生成…
1>------ 已启动生成: 项目: HelloWorld, 配置: Debug Win32 ------
1>hello_world.cpp
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(30,5): error C2248: “MyClass::privateVar”: 无法访问 private 成员(在“MyClass”类中声明)
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(18): message : 参见“MyClass::privateVar”的声明
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(9): message : 参见“MyClass”的声明
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(33,5): error C2248: “MyClass::protectedVar”: 无法访问 protected 成员(在“MyClass”类中声明)
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(15): message : 参见“MyClass::protectedVar”的声明
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(9): message : 参见“MyClass”的声明
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(36,5): error C2248: “MyClass::defaultVar”: 无法访问 private 成员(在“MyClass”类中声明)
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(10): message : 参见“MyClass::defaultVar”的声明
1>D: 02_Project 06_Visual_StudioHelloWorldHelloWorldhello_world.cpp(9): message : 参见“MyClass”的声明
1>已完成生成项目“HelloWorld.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========