函数,默认参数的使用
在C++中,允许在自定义函数的形参列表中,给形参一个默认的值,这样在调用的时候如果有实参,那么按照实参传递给形参的方法使用;若调用的时候没有指定对应的实参,则形参将使用默认值。
由于参数的传递顺序是从右至左入栈,所以有默认值的参数必须在放在形参列表的最右边!
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<iostream> using namespace std; int Sum(int a=4,int b=5) { return a+b; } int main() { cout<<Sum(5,7)<<endl; cout<<Sum()<<endl; cout<<Sum(9)<<endl; return 0; }
|
函数重载
函数重载即两个或以上的函数,函数名相同,但形参类型或个数不同,编译器根据调用方传入的参数的类型和个数,自动选择最适合的一个函数来进行绑定调用,自动实现选择。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include<iostream> using namespace std; int sum(int a,int b) { return a+b; }
double sum(double a,double b) { return a+b; }
double sum(double a,int b) { return a+b; }
double sum(int a,double b) { return a+b; }
int main() { cout<<sum(1,2)<<endl; cout<<sum(1.414,2.526)<<endl; cout<<sum(3.14,6)<<endl; cout<<sum(8,9.9)<<endl; return 0; }
|
函数模板(template)
模板是创建泛型类或函数的蓝图或公式。是泛型编程的基础。
函数模板,是可以创建一个通用的函数,可以支持多种形参。用关键字template
来定义
模板函数定义的一般形式
template<class 类型名1,class 类型名2>
返回值 函数名(形参列表)
{
函数体
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<iostream> using namespace std; template<class T1,class T2> T1 sum(T1 a,T2 b)
{ cout<<sizeof(T1)<<","<<sizeof(T2)<<"\t"; return a+b; } int main() { cout<<sum(1,2)<<endl; cout<<sum(3.14,1.414)<<endl; cout<<sum('A',2)<<endl; return 0; }
|
inline内联函数
- 内联函数的基本思想在于将每个函数调用都以它的代码体来替换
- 内联函数减少了不必要的函数栈帧的开销,节约内存
- 内联函数以空间换取了时间,但是inline对编译器只是一个建议,如果定义的函数体内有循环或递归等,编译器优化时会自动忽略掉内联
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<iostream> using namespace std;
inline int Max(int a,int b) { return a>b?a:b; } int main() { cout<<Max(3,5)<<endl; cout<<Max(7,9)<<endl; return 0; }
|
内联函数的定义要在调用之前出现