news 2026/4/29 5:21:24

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),分别用全局函数和成员 函数判断两个立方体是否相等


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 5:20:39

网盘直链下载助手:八大网盘免费获取真实下载链接的终极指南

网盘直链下载助手&#xff1a;八大网盘免费获取真实下载链接的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

作者头像 李华
网站建设 2026/4/29 5:19:28

Pearcleaner:你的Mac终极清理管家,彻底告别应用残留问题

Pearcleaner&#xff1a;你的Mac终极清理管家&#xff0c;彻底告别应用残留问题 【免费下载链接】Pearcleaner A free, source-available and fair-code licensed mac app cleaner 项目地址: https://gitcode.com/gh_mirrors/pe/Pearcleaner Pearcleaner是一款免费、开源…

作者头像 李华
网站建设 2026/4/29 5:18:32

面向边缘安全网关高效可靠供电的MOSFET选型策略与器件适配手册

随着边缘计算与物联网安全需求的升级&#xff0c;高端边缘安全网关已成为网络边缘侧数据处理与安全防护的核心节点。其电源管理与负载开关系统作为设备“能量枢纽与守卫”&#xff0c;为多核处理器、硬件加密模块、高速接口及通信单元等关键负载提供精准、稳定且高效的电能分配…

作者头像 李华