设计一个类模板 Exam<T>,实现 operator==运算符重载,用于比较各种类型数据是否相等(包括字符串和可以用等号直接进行比较的数据类型)。 程序框架: #include <iostream> using namespace std; //... int main() { Exam <char *> str1("abc"),str2("abc"); cout << (str1==str2) << "\n"; Exam <int> i1(10),i2(20); cout << (i1==i2) << "\n"; return 0; } 保证程序的运行结果为:1 0
时间: 2024-01-04 20:03:11 浏览: 124
代码如下:
```c++
#include <iostream>
#include <cstring>
using namespace std;
template<typename T>
class Exam {
private:
T data;
public:
Exam(T d):data(d){}
bool operator==(const Exam& other) const {
return data == other.data;
}
};
// 模板特化,用于处理 char* 类型
template<>
class Exam<char*> {
private:
char* data;
public:
Exam(char* d) {
data = new char[strlen(d) + 1];
strcpy(data, d);
}
~Exam() {
delete[] data;
}
bool operator==(const Exam& other) const {
return strcmp(data, other.data) == 0;
}
};
int main() {
Exam<char*> str1("abc"), str2("abc");
cout << (str1==str2) << "\n"; // 1
Exam<int> i1(10), i2(20);
cout << (i1==i2) << "\n"; // 0
return 0;
}
```
阅读全文