C++学习--类和对象

一、类的定义

它定义了一类事物的共同特征(属性)和行为(方法),是一个抽象的概念。

蓝色框住的相当于类,下面具体的就相当于对象

类的定义

外界不能访问private数据,可以通过public的方法(对外的接口)设置它的值

创建一个点类:

根据类创建对象:

成员函数:就是刚才public里面那些,show和set这种

如果要在类外面定义则:

二、对象的声明

类是模板,对象是按模板造出来的具体东西。

对象 = 实例 / 具体的个体

它是按照类这个模板,创建出来的、有具体数据的实体,是类的 "具体实现"。

1、对象成员的访问

2、对象和类的总结

1、类是抽象的模板,对象是具体的实例

2、一个类可以创建无数个对象,每个对象都拥有类定义的属性和行为,但数据可以不同

3、类规定了 "是什么样",对象是 "这个具体的东西

三、类的界面和实现

分为类的界面和类的实现(把类和类函数放进.h和.cpp文件)就是类的定义放在.h,成员函数的实现放在.cpp,在main里面调用头文件就行

四、构造函数

1、定义

构造函数 = 创建对象时自动调用的初始化函数,用来给成员变量赋初值,避免野数据。

(只能在public里面)无返回类型,函数名与类名一致

2、具体实例

在point类里面实现构造函数

这就是系统自动生成的默认构造函数

构造函数可以重载:

记得在.h文件声明

当你一个构造函数都没写的时候,系统会自动给你一个空的构造函数

五、成员初始化表

六、默认参数的构造函数

不要同时写空参构造和全默认参数构造,会出现调用歧义报错。

七、析构函数

当释放一个对象时会自动调用析构函数

1、特点

2、默认析构函数

3、析构函数的用途

八、拷贝构造函数

1、定义

2、特点

3、被自动调用

4、案例

九、浅拷贝与深拷贝

系统也会生成一个默认拷贝构造函数

1、定义

如果类中含有指针类型的变量,浅拷贝会发生一些错误

2、案例

这样会报错,因为结束时析构函数释放空间,先释放了s2的,但是s2和s1指向同一个,会释放两次,因此报错

所以要重新写一个拷贝构造函数,不用默认的

10、this指针

每次调用不同对象时,this指针就指向要调用的对象,也就是谁调用函数,this就指向谁

就像d1调用show时,this就指向d1

this指针的用途

类似在data类当中

十一、向函数传递对象

传对象不会改外面的值

传对象指针和对象引用会改外面的值

十二、static类的静态成员

有时候程序需要实现类的多个对象的数据共享和交互,可以采用全局变量实现,但是全局变量在一定程度上破坏了类的封装性,数据不够安全,所以提出静态成员的概念

修饰静态数据成员,修饰静态成员函数

1、静态数据成员

2、静态成员函数

3、案例

假设我要求平均分

现在换成定义为static的

其中可以定义对象数组 student s3 = {student(70),student(80),student(90) };

静态成员函数不能访问非静态的成员

十三、friend类的友元

允许一个外部函数里面可以访问一个类的私有成员

(友元函数)就是到类的里面声明函数,这样就相当于友元,这个函数就可以访问私有/共有/保护里面的数据

1、友元函数

这个声明放在哪里都可以

2、友元成员

3、友元类

友元是单向的

注意

十四、对象函数

案例

会先调用对象成员的构造函数,再调用自己的构造函数,析构相反

十五、const的用法

1、常数据成员

2、常成员函数

3、常对象

案例

const常对象只能调用const的数据成员

相关推荐
叼烟扛炮6 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
辣知9 小时前
辣知·化智92 《山海经》里的史前密码
学习
鬼手点金10 小时前
KV Cache 未必是一次性的:可编辑、可组合的“笔记”
java·人工智能·笔记·学习·自动化·1024程序员节
kyrie_sakura11 小时前
大模型学习18 大模型学习 - LangChain2_Model I/O
学习·自然语言处理
宝绿特塑业再生科技11 小时前
板材收缩率不稳,户外家具装配尺寸为何对不上:从切割尺寸变化到接缝不一的系统性排查与对策
笔记·科技·学习·生活·户外家具·hdpe再生颗粒·hdpe
~城南花已开~12 小时前
Intel E810 SR-IOV VF Spoofcheck 防伪造测试-KVM3
服务器·网络·笔记·学习·ubuntu·etl工程师
我命由我1234514 小时前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放15 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi
David猪大卫15 小时前
【C++修炼】STL容器—stack与queue
c语言·开发语言·数据结构·c++·经验分享·笔记·学习