C/C++学习——函数的设计

函数的默认参数

一、定义: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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值