*北大郭炜C++慕课听课笔记*
引用
-
相当于给变量取了别名,对其中任意变量的修改也会造成另一变量值的改变
-
用法:
-
引用定义后不可再修改引用对象
-
加
const
成常引用变量时,不可对通过引用变量更改引用值(常指针变量与之类似)
-
-
用于函数形参
-
用于函数返回值
int &getn(){return n;} int main(){ getn()=5; output(n); return 0; }
动态内存分配
-
用法
int *p=new int; delete p; p=new int[10]; //Assign space of the int array for p delete [] p; //Delete the array
-
与
malloc/free
的差异:new
能够创建对象,会调用构造函数,而malloc
只是单纯分配了一块空间delete
删除对象时调用析构函数,保证类内申请的动态内存能通过析构函数一并释放,而free
只是单纯释放指针所指空间
-
delete
&delete []
的差异:- 对于简单类型的数组,两者无差异
- delete虽释放数组空间,但只调用第一个元素的析构函数,其余元素不调用。
函数缺省参数&内联函数&重载函数
缺省参数
- 目的:提高程序可扩充性(新增参数时,不需要修改原有参数)
- 只能是右边的连续几个参数缺省,不可以跳过某个参数
内联函数
- 目的:减少函数调用开销
- 适用于简单的函数,执行速度快
- 编译器直接将函数代码嵌入调用处
重载函数
- 目的:减小命名的复杂性
- 条件:函数输入参数个数 | 类型 | 顺序不同(返回类型不同的不算)
- 编译器根据函数输入类型选择相应函数
类与对象
结构化程序设计的缺陷
- 程序=数据结构+算法
- 程序由全局变量及众多相互调用的函数组成,函数与其操作的数据结构没有直观联系
- 随程序规模增大,函数与数据结构的关系、函数间调用关系不直观
- 没有封装、隐藏概念,不利于程序维护、扩充、排错
- 关系复杂,难以复用
面向对象程序设计
-
面向对象的程序=类+类+类+……
-
将数据结构和操作该数据结构的函数捆绑在一起——即封装
-
特点:抽象、封装、继承、多态
-
内存分配:等于成员变量大小之和,函数为对象公用,另外存储
-
运算:可以用
=
赋值,但不能直接比较大小 -
访问属性:
- private仅该对象成员函数或同类成员函数可访问
- protected 仅同类成员函数及派生类可访问
- public 任意位置可访问
-
隐藏: private对象仅可通过成员函数访问,便于后期程序维护
-
函数重用: 成员函数参数表不同即可(需要注意避免缺省参数二义性),如
class A{ int x; public: void value(int n=0){x=n;} int value(){return x;} } //当调用value()时,存在二义性