一、默认参数
C++允许在函数定义或声明时,为形参指定默认值,即默认参数(default argument)。
(1)函数定义与函数声明只能设置一次默认参数。
(2)可以设置多个默认参数,设置的顺序自右向左。
(3)默认值可以是常量、全局变量、函数调用等,不可以是局部变量。
#include <iostream>
using namespace std;
int p1 = 2, p2 = 10;
int max(int a, int b)
{
return a>b?a:b;
}
int volume(int L=1, int W=p1+p2, int H=max(p1,p2))
{
return L*W*H;
}
int main()
{
cout << "V0 = " << volume() << endl;
cout << "V1 = " << volume(5) << endl;
cout << "V2 = " << volume(5, 10) << endl;
cout << "V3 = " << volume(5, 10, 15) << endl;
return 0;
}
二、函数重载
函数重载(function overloading)是在同一个域中用同一个函数名来定义多个函数,但函数参数列表应彼此有不同。
(1)重载函数的形参必须不同(个数不同或类型不同)。
(2)编译程序将根据实参和形参的类型及个数的最佳匹配来选择调用哪一个函数。
(3)不要将不同功能的函数声明为重载函数,以免出现调用结果的误解、混淆。
#include <iostream>
using namespace std;
int max(int a, int b)
{
return a>b?a:b;
}
double max(double a, double b)
{
return a>b?a:b;
}
int max(int a, int b, int c)
{
int temp = a>b?a:b;
return temp>c?temp:c;
}
int main()
{
int a_int = 4, b_int = 3, c_int = 5;
cout << "int max(int a, int b) = " << max(a_int, b_int) << endl;
double a_double = 5.78, b_double = 1.14;
cout << "double max(double a, double b) = " << max(a_double, b_double) << endl;
cout << "int max(int a, int b, int c) = " << max(a_int, b_int, c_int) << endl;
return 0;
}
三、函数模板
函数模板(function template)是一个独立于类型的函数,可作为一种模式,产生函数的特定类型的版本。
template<模板形参表>返回类型 函数名(形参列表)
{
函数体
}
#include <iostream>
using namespace std;
template <class C>
C my_add(C a, C b)
{
return a+b;
}
template <class T>
T my_max(T a, T b)
{
return a>b?a:b;
}
int main()
{
int a_int = 3, b_int = 4;
double a_double = 3.14, b_double = 4.63;
cout << "my_add(a_int, b_int) = " << my_add(a_int, b_int) << endl;
cout << "my_add(a_double, b_double) = " << my_add(a_double, b_double) << endl;
cout << "my_max(a_int, b_int) = " << my_max(a_int, b_int) << endl;
cout << "my_max(a_double, b_double) = " << my_max(a_double, b_double) << endl;
return 0;
}
四、库函数的调用
#include <iostream>
#include <cmath>
using namespace std;
#define pi 3.1415926535
int main()
{
double x, y;
x = pi/2;
y = sin(x);
cout << "y = sin(x) = sin(pi/2) = " << y << endl;
y = cos(x);
cout << "y = cos(x) = cos(pi/2) = " << y << endl;
return 0;
}