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的数据成员

相关推荐
千寻xun2 小时前
一、理论篇-NVME协议学习笔记
笔记·学习·fpga开发·nvme ssd·nvme协议
researcher-Jiang3 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
MartinYeung57 小时前
[论文学习]大语言模型安全综述:攻击、防御、对齐、度量与护栏的深度解析
学习·安全·语言模型
AOwhisky8 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
心中有国也有家8 小时前
AtomGit Flutter 鸿蒙客户端:白噪音场景的视觉设计
学习·flutter·华为·harmonyos
心中有国也有家8 小时前
AtomGit Flutter 鸿蒙客户端:呼吸练习的完整生命周期
学习·flutter·华为·harmonyos
Zeeland8 小时前
构建护城河:自学习 Agent
学习
尼米棕熊9 小时前
大模型学习8上-推理部署框架llama.cpp与Ollama使用指北
学习·llama
brave_zhao9 小时前
nginx的进程架构
java·学习·nginx
枫零NET9 小时前
跟着OpenCode学习Pi Coding Agent-05-Agent的类型系统
人工智能·学习