C++学习笔记【不定期更新】
1. 面向对象
1.1 对象和类
-
对象:描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。对象可认为是数据+操作。
-
类:类是具有相同的数据和相同的操作的一组对象的集合。
-
对象和类:类和对象之间是抽象与具体的关系。类是一个模板是对一类事物的抽象描述,而对象用于表示现实中该事物的个体。类是在对象之上的抽象,对象则是类的具体化,是类的实例。
-
消息传递:对象之间的交互。
-
方法:对象实现的行为称为方法。
-
面向对象程序设计的基本特征:抽象、封装、继承、多态。
1.2 对象的定义、声明、初始化
-
定义:将一段计算机内存和变量名关联起来。对于一个对象,定义只能进行一次。
-
声明:变量声明是一个语句,指定变量名称和类型,它只是说明系统内有这样一个变量(只要有声明存在,compiling时不会报错,link时ing可能报错),定义可以在其他地方完成。一个对象可以多次声明。
-
初始化:将初始值赋给变量的声明称为初始化,一般有三种方式:
1 | int m1 = 10; //变量赋值 |
1.3 动态内存分配
- new:为对象申请内存空间,返回值是该类型的指针。
1 | new int // 与 malloc(sizeof(int)) 可以视为等价 |
- delete:收回对象内存空间。
1 | delete p; // 收回空间 |
-
new/delete 是运算符,malloc/free是函数,new会调用构造函数(分配空间+初始化),molloc不会(只分配空间),delete会调用析构函数。
-
在同一程序中,不允许同时使用 {new,delete} 和 {malloc,free},两套机制会竞争内存空间。
1.4 引用
1 | char c; // a character |
- 引用类型变量和代表的变量的绑定(别名)
- 一旦进行引用,就是不能改变的,但可以有多个别名
- 对于全局变量/本地变量,在引用声明时必须同时进行绑定
- 对于结构体内/参数列表,不需要给出绑定
- 没有引用的数组,但有数组的引用
- 引用无法绑定引用
1 | int x = 47; |
输出结果为“x=47”。
1.5 面向对象
- 形参的const:告诉调用者保证不改变实参
例:二维点的移动
C:
1 | #include <iostream> |
Cpp:
1 | #include <iostream> |
- 可以将函数定义或函数声明放置在struct内
- 对象指定无需传参,只需要用结构体方式调用函数
- 常常包含初始化函数
- "::"标点符号用于连接类名和函数名
- 成员函数内隐藏的this指针指向对象(对于本例,有隐藏Point *this)
- cout << this; 输出对象地址
- x 也可也写作 this->x
1.6 构造函数和析构函数
-
struct能够直接访问里面的所有东西,class默认全部不能访问,从"public:"起能够访问,从"private:"起为无法访问的
-
建立与类同名的函数作为构造函数,其意义是在新建对象的同时进行赋值
-
拥有构造函数的类不再支持struct大括号赋值
1 | class Point |
-
析构函数的命名为"~"+对象名
-
析构的顺序为构造的逆序
-
在程序结束时,所有对象自动调用析构函数
1 | ~Point() |
最后输出结果为"~4,4~3,5"