c++语言编写程序,设计一个函数模板,实现两数的交换,并用int、float、char等类型的数据进行测试避免[错误] call of overloaded 'swap(int&, int&)' is ambiguous
时间: 2024-01-24 13:17:30 浏览: 30
以下是一个可以实现两数交换的函数模板,同时也避免了函数调用时的二义性:
```cpp
template<typename T>
void mySwap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
```
在这个函数模板中,我们使用了一个占位符类型T表示我们要交换的数的类型。然后,我们定义了一个temp变量,用来保存a的值。接着,我们将b的值赋给a,最后再将temp的值赋给b,完成了两数交换的操作。
下面是一个测试用例,我们可以分别对int、float和char类型的数进行交换:
```cpp
#include <iostream>
using namespace std;
int main() {
int a = 1, b = 2;
mySwap(a, b);
cout << "a = " << a << ", b = " << b << endl;
float c = 1.1, d = 2.2;
mySwap(c, d);
cout << "c = " << c << ", d = " << d << endl;
char e = 'a', f = 'b';
mySwap(e, f);
cout << "e = " << e << ", f = " << f << endl;
return 0;
}
```
如果我们没有使用函数模板而是写了三个不同类型的函数,那么在调用时就会出现二义性的问题,因为编译器无法确定要调用哪个函数。但是使用函数模板,编译器会根据传递的参数类型自动推导出合适的函数调用。