c++关于new、delete,缺省函数,内联函数,函数重载的复习整理
一、new和delete
在C语言中有开辟空间和释放空间的函数:
1.(void*)malloc(size)
2.free();
在c++中的new和delete的作用与他们相同,也是用来开辟内存和释放内存,
new 用来动态分配内存,delete 用来释放内存
第一种用法:
int *p = new int; //分配1个int型的内存空间
delete p; //释放内存
new 操作符会根据后面的数据类型来推断所需空间的大小。
第二种用法:
int *p = new int(10); //分配1个int型的内存空间,并给p赋值
delete p; //释放内存
在括号内的数直接赋值给开辟了空间的p指针。
第三种用法:
int *p = new int[10]; //分配10个int型的内存空间
delete [] p;
在new[]内的数为所要开辟空间的个数。
用 new[] 分配的内存需要用 delete[] 释放,它们是一一对应的。
new 所申请的内存在堆区,应该手动释放,否则只能等到程序运行结束由操作系统回收。为了避免内存泄露,我们应该养成 new 和 delete、new[] 和 delete[] 操作符成对书写的习惯。
二、缺省函数
在c++中缺省函数是指在函数的形参位置,为形参初始化。
void fun(int a,int b=20,int c=10)
{
cout<<a<<b<<c<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}
在函数中为形参初始化,若在传参时不将实参传递到已经初始化的形参位置,则在调用时,自动调用已经初始化的形参的值,所以上面最后输出为:10、20、10,
若是在传参是将实参传入,则优先调用实参的值。
缺省函数的形参,初始化应该由右到左的初始化,不能跳过。
假设已经为a初始化,则b,c都应该初始化;若b初始化,则c也应该初始化。
三、内联函数
内联函数类似于宏替换,开辟一个空间,保存相应的函数,在调用时可直接拿去使用,比较起调用函数的过程,内联函数要快很多,这是一种牺牲空间换取时间的函数。
inline void fun(int a,int b=20,int c=10)
{
cout<<a<<b<<c<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}
可以看出与函数的区别就是在函数定义的开头加上了inline,代表着这个函数为内联函数。
四、函数重载(Function Overloading)
在C++中,C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数重载。借助重载,一个函数名可以有多种用途。
想要构建函数重载,可以有多种方法:改变参数的类型、改变参数的个数和改变参数的顺序返回值类型不同的话不可以做为判断函数重载的标准。
void fun(int a,int b)
{
cout<<a<<b<<endl;
}
void fun(char a,char b)
{
cout<<a<<b<<endl;
}
void fun(double a)
{
cout<<a<<endl;
}
int main()
{
int a=10,b=20,c=30;
fun(10);
return 0;
}
函数重载就是在一个作用范围内(同一个类、同一个命名空间等)有多个名称相同但参数不同的函数。重载的结果是让一个函数名拥有了多种用途,使得命名更加方便,调用更加灵活。
但要注意的是,使用函数重载应该让两个或多个重载函数所作的功能相似,以免让自己或别人后期处理起来,对两个不相干的重载函数难以理解。