函数的默认参数
一、定义:c++允许在函数定义或函数声明时,为形参指定默认值。
返回类型 函数名(类型 默认参数名=默认值)
{
函数体
}
int add(int x=5,int y=6)
{
return x+y;
}
int main()
add(10,20);//10+20
add(10);//10+6
add();//5+6
return 0;
1、如果在函数定义时设置了默认参数,那么就不能在函数声明中再次设置,反之亦然。
int volume(int L,int W,int H=1);
int volume(int L,int W,int H=1)//错误
[
}
int volume(int L,int W,int H)//正确,函数定义的时候已经设置了默认参数,函数声明的不能再次设置
{
}
2、可以设置多个默认参数,设置的顺序是为从右向左。
int volume(int L,int W,int H=1);//正确
int volume(int L,int W=1,int H=1);//正确
int volume(int L=1,int W=1,int H=1);//正确
int volume(int L=1,int W,int H);//错位
int volume(int L,int W=1,int H);//错误
3、默认参数可以是常量、全局变量,甚至是一个函数调用,不可以是局部变量。
int p1=2,p2=10;
int max(int a, int b)
{
return a>b?a:b;
}
int volume(int L,int W,int H=1);//允许常量
int volume(int L,int W,int H=p1+p2);//允许全局变量表达式
int volume(int L,int W,int H=(max(p1,p2));//允许全局变量函数调用
int volume(int L,int W,int H=(max(5,6));//允许函数调用
带默认参数的函数举例:
#include <iostream>
using namespace std;
int p1 = 2, p2 = 10;//全局变量p1,p2;
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(void)
{
cout << volume() << endl;//L,W ,H的值为默认参数的值
cout << volume(5) << endl;//L的值为5
cout << volume(5, 10) << endl;//L的值为5.W的值为10
cout << volume(5, 10, 15) << endl;//L的值为5,W的值为10,H的值为15
return 0;
}
函数的重载
定义:在同一个域中用同一个函数名来定义多个函数,但函数参数列表应彼此有不同,或者是参数个数不同,或者是参数类型不同,或者两者都不同。
形参类型不同:
int add(int a,int b);
double add(double a,double b);
形参个数不同:
int add(int a,int b);
int add(int a,int b,int c);
函数重载举例:
#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;
}
long max(long a, long b)
{
return a > b ? a : b;
}
int main()
{
int i = 12, j = -12, k;
k = max(i, j);
cout << k << endl;
double x = 12.34, y = -12.12, z;
z = max(x, y);
cout << z << endl;
long a = 1212324234, b = -1314520, c;
c = max(a, b);
cout << c << endl;
return 0;
}
函数的模板
函数模板:是一个独立于类型的函数,可作为一种模式,产生函数的特定类型版本。
函数模板可以设计通用型的函数,这些函数与类型无关并且只在需要的时候实例化,从而形成“批量型”的编程方式。
函数模板语法定义:
template<模板形参列表> 返回类型 函数名(形参列表)
{
函数体
}
template <typename T> T abs(T x)
{
return x<0?-x:x;
}
int main()
{
int n=-5;
double d=-5.5;
cout<<abs(n)<<abs(d)<<endl;
return 0;
}
模板形参表:使用一对“<>”括起来的一个或者多个模板形参的列表,不允许为空,形参之间以“,”分隔开。
1、第一种形式
typename 类型参数名1,typename 类型参数名2,…
2、第二种形式(不常用)
class 类型参数名1,class 类型参数名2,…
函数模板举例:
#include <iostream>
using namespace std;
template <class T> T add(T a, T b)
{
return a + b;
}
int main()
{
cout << add(10, 20) << endl;
cout << add(10.12, 20.38) << endl;
cout << add('A', 'b') << endl;//生成字符型版本的add
cout << add(10, 20) << endl;
return 0;
}