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

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


类的定义

外界不能访问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的数据成员