[C++] 由C语言过渡到C++的敲门砖-函数重载

时间:2024-07-10 10:35:13

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

参数类型不同

样例如下:

// 1、参数类型不同
int Add(int left, int right)
{
	cout << "int Add(int left, int right)" << endl;
	return left + right;
} 
double Add(double left, double right)
{
	cout << "double Add(double left, double right)" << endl;
	return left + right;
} 

参数个数不同

样例如下:

// 2、参数个数不同
void f()
{
	cout << "f()" << endl;
} 

void f(int a)
{
	cout << "f(int a)" << endl;
} 

参数类型顺序不同

样例如下:

// 3、参数类型顺序不同
void f(int a, char b)
{
	cout << "f(int a,char b)" << endl;
} 

void f(char b, int a)
{
	cout << "f(char b, int a)" << endl;
}

不能构成函数重载的举例

返回值不同

当返回值不同的时候,我们在使用的时候无法识别出要使用哪一个函数,因为使用哦的时候仅仅是调用,不会显式的告诉编译器你要用哪个返回值的函数,所以返回值不同的函数不能构成重载。

// 返回值不同不能作为重载条件,因为调⽤时也⽆法区分
void fxx()
{}

int fxx()
{
 return 0;
}

全缺省参数与无参函数

区别于构造函数,类外的全缺省参数函数与无参函数构成的函数重载无法正常调用,存在歧义。当调用时编译器不知道应该使用哪一个函数。

void f1()
{
    cout << "f()" << endl;
} 

void f1(int a = 10)
{
    cout << "f(int a)" << endl;
}