c+o定义两个具备数据交换功能的函数swap(int a, int b)和函数 swap(int a, int” b)在 main 函数中分别调用这两个函数,打印调用前后main 函数中两个原始数据
时间: 2024-09-18 21:00:32 浏览: 51
在 C++ 中,函数名的重载(Overloading)允许我们使用相同的函数名称但有不同的参数列表,这是基于参数类型、数量或类型的顺序差异。对于`swap(int a, int b)` 和 `swap(int a, double b)` 这两个函数,第一个接受两个整数作为参数,而第二个接受一个整数和一个双精度浮点数。
如果我们在 `main()` 函数中先调用 `swap(a, b)`,然后交换整型变量 a 和 b 的值,然后再调用 `swap(a, c)` 其中 c 是一个double类型的变量,尝试交换 a 和 c,会触发类型匹配错误,因为 `a` 是整数,`c` 是浮点数,它们不直接兼容。
下面是一个简单的示例,假设我们有原始变量:
```cpp
#include <iostream>
// 定义两个 swap 函数
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
std::cout << "After swapping integers: a = " << a << ", b = " << b << std::endl;
}
void swap(int a, double b) {
// 这里不会被调用,因为无法隐式转换参数类型
std::cout << "This version of swap will not be called." << std::endl;
}
int main() {
int a = 5;
double c = 2.5;
// 调用第一个 swap 函数
swap(a, b); // 假设 b 是未初始化的,这里会报错
// 输出原始数据(此时还未调用)
std::cout << "Before swap: a = " << a << ", c = " << c << std::endl;
return 0;
}
```
运行此代码,你会看到第一次调用时由于参数类型不匹配导致的错误,并且原始数据会在错误发生前被打印出来。注意,在这个例子中,`b` 应该是一个已知的整数,而不是未初始化的,否则会造成未定义的行为。
阅读全文