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

C++深入分析讲解类的知识点

知识点引入

C语言中 数据 和 方法 是独立:

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

//c语言的思想:数据 方法 分开

//人

typedefstruct

{

charname[32];

intage;

}Person;

//动物

typedefstruct

{

charname[32];

intage;

inttype;

}Dog;

voidPersonEat(Person *p)

{

cout<<p->name<<"正在吃饭"<<endl;

}

voidDogEat(Dog *d)

{

cout<<d->name<<"正在吃狗粮, 汪汪"<<endl;

}

voidtest01()

{

Person person = {"老王",43};

Dog dog={"旺财",6};

PersonEat(&person);

DogEat(&dog);

// 出现一个问题(数据 方法独立 容易造成 方法 调用错误数据)

DogEat((Dog *)&person);

}

类的初识

1、封装

把变量(属性)和函数(操作)合成一个整体,封装在一个类中

对变量和函数进行访问控制(公有、私有、保护)

类的封装:将数据和方法封装在一起 加以权限区分 用户只能通过公共方法 访问私有数据。

2、权限

private私有 public公有 protected保护

private私有:类外部不可直接访问私有数据 类内部可以访问

protected保护:类外部不可直接访问私有数据 类内部可以访问

public公有:类外部可以访问私有数据 类内部可以访问

权限只是针对 类的外部 , 类的内部 没有权限之分

class 类名{//抽象的概念 系统不会为其分配空间
private://私有 类的外部 不可直接访问
protected://保护 类的外部 不可直接访问
数据
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

classPerson//抽象的概念

{//类的内部

private:

intm_money;//私有数据

protected:

intm_age;

public:

voiddese()

{

m_money = 100;

m_age = 18;

cout<<"我有房 有车 又年轻"<<m_age<<"岁又有钱"<<m_money<<"万美金 我就爱嘚瑟"<<endl;

}

};

voidtest01()

{

//用类 去 实例化 一个对象(就是用Person定义一个变量)

Person lucy;

//cout<<"兄弟你的钱:"<<lucy.m_money<<endl;//err 内的外部不可访问

//cout<<"兄弟你的年龄:"<<lucy.m_age<<endl;//err 内的外部不可访问

lucy.dese();//ok 公有的类的外部可用访问

//private protected虽然是私有、保护的 类外不可访问 但是用户可以借助 public公有的方法

//间接的访问私有、保护的数据

}

class默认是私有的 数据私有 方法公有 用户就可以借助 公有方法 间接的操作 私有数据

3、类的定义(定义类型)

关键字 class

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 <iostream>

usingnamespacestd;

//类的定义:是不占空间 只有用类实例化 对象的时候 系统为对象开辟空间

classData

{

private://私有

// int a=10;//err 定义类的时候 尽量不要 给成员赋值

inta;//成员 数据

protected://保护

intb;

public://公有

intc;

//成员函数

voiddata_show(void)

{

//类的内部:没有权限区分

cout<<a<<", "<<b<<", "<<c<<endl;

}

};

//类中的数据成员 拥有 独立的空间

voidtest01()

{

//使用Data实例化一个对象名为ob的对象

Data ob;

//成员数据依赖于对象的

//cout<<" ob.a = "<<ob.a<<endl;//err a为私有 类外不能直接访问

//cout<<" ob.b = "<<ob.b<<endl;//err b为保护 类外不能直接访问

cout<<" ob.c = "<<ob.c<<endl;//err c为公有 类外可以直接访问

//对象 通过公共方法 间接调用私用数据

ob.data_show();

}

intmain(intargc,char*argv[])

{

test01();

return0;

}

4、类的成员函数与类中声明及类外定义

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

classData2

{

//默认为私有

inta;

public:

//类中声明 类外定义

voidsetA(intv);

intgetA(void);

};

voidData2::setA(intv)

{

a = v;

return;

}

intData2::getA()

{

returna;

}

voidtest02()

{

Data2 ob;

ob.setA(100);

cout<<"a = "<<ob.getA()<<endl;

}

Person类的设计

设计一个Person类型

设计一个Person类,Person类具有name和age属性,提供初始化函数(Init),并提供对name和age的 读写函数(set,get),但必须确保age的赋值在有效范围内(0-100),超出有效范围,则拒绝赋值,并提供 方法输出姓名和年龄。

person.h:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#ifndef PERSON_H

#define PERSON_H

//类的头文件:一般定义成员数据 声明成员函数

classPerson

{

private:

charm_name[32];

intm_age;

public:

//初始化m_name m_age

voidinit(char*name,intage);

//设置name

voidsetName(char*name);

//获取name

char*getName(void);

//设置age

voidsetAge(intage);

//获取age

intgetAge(void);

//显示m_name m_age

voidshowPerons(void);

};

#endif // PERSON_H

person.cpp:

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

#include "person.h"

//#include <string.h>

#include<cstring>

#include<iostream>

usingnamespacestd;

//定义类的成员函数

voidPerson::init(char*name,intage)

{

strcpy(m_name, name);

if(age>=0 && age<=100)

{

m_age = age;

}

else

{

cout<<"年龄输入非法"<<endl;

}

}

voidPerson::setName(char*name)

{

strcpy(m_name, name);

return;

}

char*Person::getName()

{

returnm_name;

}

voidPerson::setAge(intage)

{

if(age>=0 && age<=100)

{

m_age = age;

}

else

{

cout<<"年龄输入非法"<<endl;

}

return;

}

intPerson::getAge()

{

returnm_age;

}

voidPerson::showPerons()

{

cout<<"姓名:"<<m_name<<", 年龄:"<<m_age<<endl;

return;

}

main.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <iostream>

#include "person.h"

usingnamespacestd;

intmain(intargc,char*argv[])

{

Person ob;

ob.init("lucy", 18);

ob.showPerons();

ob.setName("bob");

cout<<"姓名:"<<ob.getName()<<endl;

ob.setAge(19);

cout<<"年龄:"<<ob.getAge()<<endl;

return0;

}

设计立方体类

设计立方体类(Cube),求出立方体的面积( 2ab + 2ac + 2bc )和体积( a * b * c),分别用全局函数和成员 函数判断两个立方体是否相等


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

相关文章:

  • 深入对比:frontier_exploration vs rrt_exploration,你的扫地机器人更适合哪种算法?
  • 面向边缘安全网关高效可靠供电的MOSFET选型策略与器件适配手册
  • 深入华为FusionStorage核心:手把手拆解VBS、OSD、MDC,搞懂数据到底怎么存
  • C字符串与C++字符串的深入理解
  • 别再傻傻等下载了!手把手教你用hf-mirror镜像站搞定Huggingface模型和数据集
  • 一文讲清物料管理方案是什么?物料管理方案包含哪些内容?
  • k折交叉验证原理与Python实战指南
  • 后端学习路线全景,后端该如何学习
  • 告别复杂配置:Qwen3-0.6B一键部署教程,新手友好
  • Switch游戏文件管理终极指南:NSC_BUILDER让你的游戏库焕然一新
  • 拯救者R7000成功连上MatePad Pro!保姆级非华为电脑多屏协同配置流程(含驱动、显卡避坑)
  • 别再手动转换了!一文搞懂STM32 CORDIC模块的Q31格式与浮点快速互转技巧
  • 告别‘鬼踩油门’!用ADI的ADBMS6832芯片,手把手教你读懂电车BMS的‘心跳’信号
  • LiuJuan20260223Zimage与Dify平台集成:低代码AI应用开发
  • 生产NFC卡片定制制造商有哪些
  • Vibeflow:轻量级音频信号处理库,实现节拍跟踪与音乐分析
  • 基于会话状态机的AI助手编排引擎Meeseeks:架构解析与实战部署
  • Arduino外部中断的‘坑’我帮你踩完了:attachInterrupt参数模式全解析与ESP32避坑指南
  • Nanbeige 4.1-3B Node.js全栈开发:环境配置到项目部署
  • 终极免费在线法线贴图生成器:NormalMap-Online完整使用指南
  • 终极指南:零基础安装ChanlunX缠论插件,通达信技术分析自动化
  • LLM训练中的熵崩溃问题与熵正则化解决方案
  • 当Android App遇上Python:我用Chaquopy把OpenCV图像处理塞进了APK(实战记录)
  • 保姆级教程:在Qt 5.15上为工业触摸屏实现丝滑的双指缩放(附防抖与锚点优化代码)
  • 文本数据净化与脱敏实战:构建安全高效的数据预处理流水线
  • 别再只用交乘项了!深入对比Stata中分组系数检验的SUR、bdiff与Bootstrap方法
  • 从Bayer到4 Cell:手把手解析手机Sensor像素排列的演进与Remosaic算法
  • 数据结构算法实践:用Nanbeige 4.1-3B生成代码与可视化讲解
  • 单细胞数据“质检员”指南:拿到表达矩阵后,你的第一件事应该是检查这些
  • 别再手动画机柜图了!用openDCIM 23.02 + CentOS 7自动化管理你的数据中心(保姆级LAMP环境搭建)