缺省参数
缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调⽤该函数时,如果没有指定实参 则采⽤该形参的缺省值,否则使⽤指定的实参,缺省参数分为全缺省和半缺省参数。(有些地⽅把 缺省参数也叫默认参数),要注意的是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;
}
实现交换一般要用指针传参,学了引用之后,实现这个会更方便一些。引用有引用的有点,但引用不会代替指针,两者各有自己的特点。两者相辅相成。