c++远征之离港篇知识点
2016-09-23 12:45
183 查看
介绍c++中主要知识点:封装、继承、多态。主要的比较:指针 & 引用,#define & const,函数默认值 & 函数重载,不过最头疼的问题是内存管理,因为这完全需要程序员设定。 一、引用 引用是变量的别名 例子1:(指针) void swap(int *a,int *b) { int c=0; c=*a; *a=*b; *b=c; } int main() { int x=10,y=20; swap(&x,&y); return 0; } 例子2:(引用) void swap(int &a,int &b) { int c=0; c=a; a=b; b=c; } int main() { int x=10,y=20; swap(x,y); return 0; } 二、const const与指针 const int *p=&x 等价 int const *p=&x *p的值不能变,不过指向x的地址可以变 int *const p=&x p指向的地址不能变,只能为x的地址,但是 *p可变 const int x; int *p =&x ;//出错,*P的范围大,x的范围小,用小的范围赋值大的会报错; int x; const int *p=&x ;//这样是正确的; const与引用 const int &p=x;//x值不可变 ,即写成p=3会报错 三、c++函数特性 函数参数默认值 void getmax(int i,int j=5,int k=10);//默认时j=5,k=10 但是不能写成 void getmax(int i=10,int j=5,int k); //有参数的默认值要在右边,默认实参从右向左设置,编译器求实参是从右向左,如果从左向右检查,如果参数类型复杂到最后也没检查到默认实参,编译器的效率就会很低,所以就规定参数从右向左执行 函数实现的时候最好去掉默认值,因为在有些编译器编译不能通过。 重载 相同的函数名,形参的个数和类型不同,返回值不同 内联inline函数使用 inline和#define的不同 ①内联函数与普通函数相比,加快了程序运行速度,省去了中断调用过程,在编译的时候,代码直接嵌套在程序中,而#define只是简单地替换。 ②内联函数可以参数类型安全性检查,相对于宏定义而言较大的优势。 ③宏定义不是函数,只是在预编译的时候将字符串简单的替代。 为什么不把所以的函数定义成内联函数? ①编译器决定的,递归函数不能定义成内联函数 ②内联函数是嵌套在代码中,如果对于执行内联函数时间相比调用函数时间过大,那么效率就会降低。如for,while,switch. ③每一处内联函数都要复制代码,将使程序总代码量增大,增大内存空间。 4、内存管理 内存的本质是资源,我们能做的就是申请和释放内存。new/delete 申请/释放 如何申请和释放内存块呢? int *arr=new int[10]; delete [] arr; 申请内存一定成功吗? 答案是否定的,因为可能当前内存已经满了,申请内存失败,所以以下代码判断
int *arr=new int[1000]; if(arr==NULL) { //申请内存失败 }
delete也不能重复删除内存,否则计算机出现异常。为了避免这个风险,我们需要
delete p; p=NULL;
new/delete和malloc/free的区别 ①new/delete运算符,malloc/free是库函数 ②在构造函数和析构函数要申请或释放内存,malloc/free是库函数,不在编译器控制权限内,不能把构造函数和析构函数强加给他们。
相关文章推荐