当前位置: 首页 > news >正文

C++深入讲解类与封装的概念与使用

一、类的组合

电脑一般而言是由 CPU,内存,主板,键盘和硬盘等部件组合而成。

二、类的封装

类通常分为以下两个部分

  • 类的实现细节
  • 类的使用方式

  • 当使用类时,不需要关心其实现细节
  • 当创建类时,才需要考虑其内部实现细节

例:

普通用户使用手机

  • 只需要学习如何发短信,打电话,拍照,等等

手机开发工程师

  • 需要考虑手机内部的实现细节

封装的基本概念

根据经验:并不是类的每个属性都是对外公开的

  • 如:女孩子不希望外人知道自己的体重和年龄
  • 如:男孩子不希望别人知道自己的身高和收入

而一些类的属性是对外公开的

  • 如:人的姓名,学历,国籍,等

必须在类的表示法中定义属性和行为的公开级别

  • 类似文件系统中文件的权限

C++中类的封装

  • 成员变量:C++中用于表示类属性的变量
  • 成员函数:C++中用于表示类行为的函数
  • C++中可以给成员变量和成员函数定义访问级别

public

  • 成员变量和成员函数可以在类的内部和外界访问和调用

private

  • 成员变量和成员函数只能在类的内部被访问和调用

下面看一段类成员的访问属性的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

#include <stdio.h>

structBiology

{

boolliving;

};

structAnimal : Biology

{

boolmovable;

voidfindFood()

{

}

};

structHuman : Animal

{

voidsleep()

{

printf("I'm sleeping...\n");

}

voidwork()

{

printf("I'm working...\n");

}

};

structGirl : Human

{

private:

intage;

intweight;

public:

voidprint()

{

age = 22;

weight = 48;

printf("I'm a girl, I'm %d years old.\n", age);

printf("My weight is %d kg.\n", weight);

}

};

structBoy : Human

{

private:

intheight;

intsalary;

public:

intage;

intweight;

voidprint()

{

height = 175;

salary = 9000;

printf("I'm a boy, my height is %d cm.\n", height);

printf("My salary is %d RMB.\n", salary);

}

};

intmain()

{

Girl g;

Boy b;

g.print();

b.age = 19;

b.weight = 120;

//b.height = 180;

b.print();

return0;

}

下面为输出结果:

注意:如果我们访问 boy 里面的 height,因为是 private,所以编译时就会报如下错误:

三、类成员的作用域

类成员的作用域

  • 类成员的作用域都只在类的内部,外部无法直接访问
  • 成员函数可以直接访问成员变量和调用成员函数
  • 类的外部可以通过类变量访问 public 成员
  • 类成员的作用域与访问级别没有关系

注:C++ 中用 struct 定义的类中所有成员默认为 public

下面看一段类成员的作用域的代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

#include <stdio.h>

inti = 1;

structTest

{

private:

inti;

public:

intj;

intgetI()

{

i = 3;

returni;

}

};

intmain()

{

inti = 2;

Test test;

test.j = 4;

printf("i = %d\n", i);// i = 2;

printf("::i = %d\n", ::i);// ::i = 1;

// printf("test.i = %d\n", test.i); // Error

printf("test.j = %d\n", test.j);// test.j = 4

printf("test.getI() = %d\n", test.getI());// test.getI() = 3

return0;

}

下面为输出结果:

::i 意味着访问默认命名空间中的 i 变量,默认的命名空间就是全局作用域。

四、小结

  • 类通常可以分为使用方式和内部细节两部分
  • 类的封装机制使得使用方式和内部细节相分离
  • C++ 中通过定义类成员的访问级别实现封装机制
  • public 成员可以在类的内部和外界访问和调用
  • private 成员只能在类的内部被访问和调用

到此这篇关于C++ 深入讲解类与封装的概念与使用的文章就介绍到这了,

http://www.jsqmd.com/news/873373/

相关文章:

  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署保姆级教程
  • YAML配置文件智能编辑技术方案:Red Hat专业工具提升开发效率
  • 2026年腾讯云OpenClaw/Hermes Agent配置Token Plan部署操作全解
  • 用LabVIEW和USRP玩转高阶QAM:从16QAM到1024QAM的星座图调试实战
  • 别再被Elsevier投稿系统坑了!手把手教你搞定LaTeX文件上传与elsarticle.cls版本兼容问题
  • 尿布台ODM领域的几家代表性生产企业 - 品牌测评鉴赏家
  • Midjourney复古出图率暴跌47%?紧急修复:V6.2新增--style retro v2.1底层协议兼容补丁(含3个必启开关)
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan部署操作全解
  • 范式锁定与认知殖民:全球AI大停滞时代的中国突围与“贾子之路”重构
  • 3个关键技巧:如何用SleeperX实现macOS智能睡眠管理的高效控制
  • 告别空引用恐慌:一份给C#开发者的Visual Studio编译器警告‘消警’保姆级清单
  • 认知主权视域下AI范式危机与中国突围:基于“贾子之路”的文明重构路径研究
  • 分享今日日常
  • 2026年京东云OpenClaw/Hermes Agent配置Token Plan搭建流程全公开
  • 别再死记硬背了!用ChatGPT当你的ReactJS私人教练,5天搞定组件和状态
  • 别再只用L.polygon了!用Leaflet + GeoJSON处理复杂行政区遮罩(含飞地、嵌套洞)
  • 6招搞定创新文化|干货必看
  • SpringBoot项目里,如何让ShardingSphere 5.x和dynamic-datasource和平共处?一个配置类搞定混合数据源
  • 开发团队头脑风暴创意收集评级程序,批量收集创意,按照可行性自动分级筛选。
  • 如何快速部署现代化仓库管理系统:中小企业的完整解决方案
  • 终极HsMod炉石传说插件:快速提升游戏体验的完整指南
  • 通过Taotoken CLI工具一键为团队统一配置多款AI开发工具
  • 从‘最大熵’到‘瑞丽熵’:手把手推导RDP公式,理解差分隐私的理论进化
  • 【Claude ROI计算模型】:20年AI商业化专家首度公开3大核心公式与5个避坑指南
  • 如何快速免费提取碧蓝航线Live2D模型?终极完整教程
  • AI写作辅助平台的合规秘籍:如何界定“合理使用”与学术不端?
  • 设计职场人脉标签精细化管理程序,给人脉分类标注领域,精细对接工作合作需求,
  • 别再只会用555了!手把手教你用运放和RC电路搭一个50Hz正弦波信号源(附Multisim仿真文件)
  • 编写加班时长合理管控程序,统计无效加班,提醒及时下班,守护个人生活边界。
  • 别再乱用Show()和ShowDialog()了!C# WinForms弹窗实战,串口设置窗口就该这么写