笔记参考中国大学mooc上的北京大学-程序设计与算法(三)C++面向对象程序设计的视频课程
一、引用的概念
1.引用的介绍
int n = 4;
int & r = n;//r引用了n ,r的类型是int &
这里r等价于n,对r做修改,n也会被修改,引用最直观的用处就是在函数内修改所传入的参数:
//传引用比传指针更加安全
//引用初始化以后,就不可以再被改变为另一个对象的引用。
//而指针仍是指向该地址,对象析构以后,就可能会出现野指针
void swap(int & a, int & b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
//在这个函数里,由于引用的介入,可以完成对a,b值的交换
//同样的功能在c里需要这样实现:
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
在定义引用时一定要初始化成引用某个变量
2.常引用
不能通过常引用去修改其引用的内容:
int n = 100;
const int & r = n;
r = 200; //编译会出错
n = 300;//没问题
二、const的用法
const和#define作用类似,但是推荐尽量用const来定义常量,这样会使常量有固定的类型。
三、动态内存分配
c使用malloc实现,c++主要用new,两种用法:
更新下:T_T,面试被问到new和malloc的区别,应该是malloc返回void *,需要再进行转换,new直接返回对应类型指针。
- 第一种,分配变量
P = new T;
动态分配出一片大小为 sizeof(T)字节 的内存空间,并将其起始地址赋值给P
T是任意类型名,P是类型为 T * 的指针
- 第二种,分配数组
P = new T[N];
//动态分配出一片大小为 sizeof(T)字节 的内存空间,并将其起始地址赋值给P
T:任意类型名
P:类型为T*的指针
N:要分配的数组元素个数,可以是整形表达式
用delete释放内存:
有new,必有delete
当new了数组后,使用delete [] p; 来完全释放内存空间
四、内联函数和重载函数
- 内敛函数
函数调用有额外开销,为了快速调用简单函数,可以使用inline定义内联函数,缺点是程序体积会增大
内联函数:把代码直接插入,不在跳转。
inline int Max(int a,int b)
{
...
}
- 函数重载
名称一样,参数表不一样
- 缺省参数
可以有缺省值,就是默认值,与python类似:
void func(int x1, int x2 = 2, int x3 = 3)
{
}
如果有这样调用:
func(10,8) 即x2 = 8,不在等于2
可以利用缺省值,方便维护