定义一个类模板来实现三个数比较大小,分别用两个成员函数max()和min()返回最大值和最小值。要求不仅能够处理整型、实型、字符型等基本数据,而且能够正确处理字符串。用c++解决
时间: 2024-03-22 19:39:00 浏览: 87
C语言程序设计-编写自定义函数max,用来求三个数的最大值(要求:数据的输入、输出在主函数中实现)。
5星 · 资源好评率100%
好的,以下是对应的类模板实现:
```c++
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class Compare {
public:
// 构造函数
Compare(T a, T b, T c) : m_a(a), m_b(b), m_c(c) {}
// 返回最大值
T max() const {
T max_val = m_a;
if (m_b > max_val) {
max_val = m_b;
}
if (m_c > max_val) {
max_val = m_c;
}
return max_val;
}
// 返回最小值
T min() const {
T min_val = m_a;
if (m_b < min_val) {
min_val = m_b;
}
if (m_c < min_val) {
min_val = m_c;
}
return min_val;
}
private:
T m_a, m_b, m_c;
};
// 特化模板类,处理字符串
template <>
class Compare<string> {
public:
// 构造函数
Compare(string a, string b, string c) : m_a(a), m_b(b), m_c(c) {}
// 返回最大值
string max() const {
string max_val = m_a;
if (m_b > max_val) {
max_val = m_b;
}
if (m_c > max_val) {
max_val = m_c;
}
return max_val;
}
// 返回最小值
string min() const {
string min_val = m_a;
if (m_b < min_val) {
min_val = m_b;
}
if (m_c < min_val) {
min_val = m_c;
}
return min_val;
}
private:
string m_a, m_b, m_c;
};
int main() {
// 整型比较
Compare<int> cmp1(1, 2, 3);
cout << "max: " << cmp1.max() << ", min: " << cmp1.min() << endl;
// 实型比较
Compare<double> cmp2(1.5, 2.5, 3.5);
cout << "max: " << cmp2.max() << ", min: " << cmp2.min() << endl;
// 字符串比较
Compare<string> cmp3("hello", "world", "cpp");
cout << "max: " << cmp3.max() << ", min: " << cmp3.min() << endl;
return 0;
}
```
运行结果:
```
max: 3, min: 1
max: 3.5, min: 1.5
max: world, min: cpp
```
在类模板定义中,我们用 `typename` 关键字来声明模板参数类型,然后在类的成员函数中就可以使用这个类型了。此外,我们还特化了模板类 `Compare`,以处理字符串类型的比较。最后,在 main 函数中,我们分别实例化了 `Compare<int>`、`Compare<double>` 和 `Compare<string>` 三个模板类,分别对应整型、实型和字符串类型的比较。
阅读全文