函数,默认参数的使用

在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)
//模板函数中的T1T2类型将根据实际传入的类型变成具体类型。这个化成就叫做模板的实例化。
//T1T2是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。
{
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;
}

内联函数的定义要在调用之前出现



 评论