C++的缺省参数、函数重载和引用

缺省参数

缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数),要注意的是C++规定半缺省参数必须从右往左依次连续缺省,不能间隔跳跃给缺省值。

全缺省

#include<iostream>
namespace HJY
{
	int ADD(int a = 1, int b = 1)
	{
		return a + b;
	}
}

int main()
{
	std::cout << HJY::ADD() << std::endl;
	int a = 0, b = 0;
	std::cin >> a >> b;
	std::cout << HJY::ADD(a, b) << std::endl;
	return 0;
}

半缺省

#include<iostream>
namespace HJY
{
	int ADD(int a, int b = 1)
	{
		return a + b;
	}
}

int main()
{
	int n = 0;
	std::cin >> n;
	std::cout << HJY::ADD(n) << std::endl;
	int a = 0, b = 0;
	std::cin >> a >> b;
	std::cout << HJY::ADD(a, b) << std::endl;
	return 0;
}

函数重载

C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同,但不能是形参相同,函数类型不同。而C语⾔是不⽀持同⼀作⽤域中出现同名函数的。

1.参数个数不同

#include<iostream>

void func()
{
	std::cout << "void func()" << std::endl;
}

void func(int a)
{
	std::cout << "void func(int a)" << std::endl;
}

int main()
{
	func();
	func(1);
	return 0;
}

2.参数类型不同

#include<iostream>

void Swap(int a, int b)
{
	std::cout << "void Swap(int a, int b)" << std::endl;
}

void Swap(double a, double b)
{
	std::cout << "void Swap(double a, double b)" << std::endl;
}

int main()
{
	Swap(1, 1);
	Swap(1.2, 1.6);
	return 0;
}

还有一个要注意的点是,函数重载时一定要注意缺省参数的使用,会导致程序报错。

引用

引用是C++中一种特殊的用法。与指针不同,引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,它和它引⽤的变量共⽤同⼀块内存空间。

#include<iostream>

int main()
{
	int a = 0;
	std::cin >> a;
	//引用
	int& b = a;

	std::cout << "a=" << &a << ' ' << "b=" << &b << std::endl;
	std::cout << "a=" << a << ' ' << "b=" << b << std::endl;

	b++;
	std::cout << "a=" << a << ' ' << "b=" << b << std::endl;

	a++;
	std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
	return 0;
}

而且一个变量可以多次引用

还有一个要注意的点

引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷贝提⾼效率和改变引⽤对象时同时改变被 引⽤对象。引⽤传参跟指针传参功能是类似的,但引⽤传参相对更⽅便⼀些。

据最简单的例子:

#include<iostream>
void Swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int a = 0, b = 0;
	std::cin >> a >> b;
	Swap(a, b);
	std::cout << "a=" << a << ' ' << "b=" << b << std::endl;
	return 0;
}

实现交换一般要用指针传参,学了引用之后,实现这个会更方便一些。引用有引用的有点,但引用不会代替指针,两者各有自己的特点。两者相辅相成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>