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

相关推荐
楼田莉子2 小时前
C++20新特性:Range库
开发语言·c++·后端·学习·c++20
段一凡-华北理工大学2 小时前
工业领域的Hadoop架构学习~系列文章02:HDFS架构深度剖析
大数据·人工智能·hadoop·学习·架构·高炉炼铁
星恒随风2 小时前
C语言数据结构排序算法详解(上):从插入排序、希尔排序到选择排序、堆排序
c语言·数据结构·笔记·学习·排序算法
魔法阵维护师3 小时前
从零开发游戏需要学习的c#模块,第三十章(掉落物品 —— 血包与能量)
学习·游戏·c#
在学了加油3 小时前
Inception v1学习笔记
笔记·python·学习
是一个Bug3 小时前
LangChain 入门完全指南:核心概念、学习路线与实战 Demo
学习·langchain
晓梦林3 小时前
EVA靶场学习笔记
android·笔记·学习
AI算法沐枫3 小时前
基于YOLO26深度学习的【果园荔枝检测与计数】系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
开发语言·人工智能·python·深度学习·qt·学习·机器学习
OBiO20133 小时前
精准靶向心肌细胞的AAV怎么选择?
学习