您的位置:首页 > 编程语言 > C语言/C++

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是库函数,不在编译器控制权限内,不能把构造函数和析构函数强加给他们。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++-离港篇