一、定义

1.1 C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同、顺序不同或者类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。

函数重载_函数重载

1.2 而不同域出现的同名函数时,一般是不同命名空间里面的同名函数。但是如果同时展开同名函数并使用时,也需要保证这些同名函数的形参不同从而构成重构函数,或者指定展开使用,不然会出现调用歧义。

函数重载_函数重载_02

改正如下:指定命名空间展开

#include<iostream>
using namespace std;

namespace a1 {
	void add(int a, double b) {
		cout << a + b << endl;
	}
}

namespace a2 {
	void add(int b, double a) {
		cout << a + b << endl;
	}
}

using namespace a1;
using namespace a2;

int main() {
	int a = 1,b=2;
	a1::add(a, b);
	a2::add(a, b);
	return 0;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

1.3 返回值不作为评判函数重载的标准

二、使用注意

2.1尽量避免依赖于隐式类型转换来区分不同的函数版本,应该通过参数的明确类型来清晰地定义函数,从而减少潜在的混淆和错误。

函数重载_函数重载_03

2.2满足定义,构成函数重载,但是出现了调用歧义

函数重载_函数重载_04