} 4. 综合编程:使用类模板实现不同类型数据的加法运算,并正确输出结果,满足以下要求: (1) 实现一个管理 int 类型数据的类:类名 Mint,实现类的定义及相关功能代码; (2) 实现一个管理 float 类型数据的类:类名 Mfloat,实现类的定义及相关功能代码,与 Mint 类相比较,额外的公有性质的接口包含可以获取所管理的 float 类型数据的整数部 分的接口和小数部分的接口; (3) 实现一个管理复数类型数据的类(复数的实部用 real 表示,虚部用 img 表示):类名 Mcomplex,实现类的定义及相关功能代码;
时间: 2024-03-31 22:37:14 浏览: 38
编程_集合运算_类模板_源码
好的,我可以为您提供一个类模板,实现不同类型数据的加法运算,并满足以上要求:
```c++
#include <iostream>
using namespace std;
template <class T>
class MyType {
public:
MyType(T a, T b);
MyType<T> operator+(const MyType<T>& other);
void print();
private:
T real_;
T img_;
};
template <class T>
MyType<T>::MyType(T a, T b) {
real_ = a;
img_ = b;
}
template <class T>
MyType<T> MyType<T>::operator+(const MyType<T>& other) {
MyType<T> res(real_ + other.real_, img_ + other.img_);
return res;
}
template <class T>
void MyType<T>::print() {
cout << "(" << real_ << ", " << img_ << ")" << endl;
}
class Mint : public MyType<int> {
public:
Mint(int a, int b) : MyType<int>(a, b) {}
};
class Mfloat : public MyType<float> {
public:
Mfloat(float a, float b) : MyType<float>(a, b) {}
int getIntPart() { return static_cast<int>(real_); }
float getFloatPart() { return img_ - static_cast<int>(img_); }
};
class Mcomplex : public MyType<float> {
public:
Mcomplex(float a, float b) : MyType<float>(a, b) {}
void print() { cout << real_ << " + " << img_ << "i" << endl; }
};
int main() {
Mint mint1(1, 2);
Mint mint2(3, 4);
Mint mint3 = mint1 + mint2;
mint3.print();
Mfloat mfloat1(1.23, 4.56);
Mfloat mfloat2(3.45, 6.78);
Mfloat mfloat3 = mfloat1 + mfloat2;
mfloat3.print();
cout << "Int part of mfloat3: " << mfloat3.getIntPart() << endl;
cout << "Float part of mfloat3: " << mfloat3.getFloatPart() << endl;
Mcomplex mcomplex1(1.0, 2.0);
Mcomplex mcomplex2(3.0, 4.0);
Mcomplex mcomplex3 = mcomplex1 + mcomplex2;
mcomplex3.print();
return 0;
}
```
在这个类模板中,使用一个 `MyType` 类来管理不同类型的数据,包括实部和虚部。`Mint` 类和 `Mfloat` 类都继承自 `MyType` 类,并且 `Mfloat` 类额外提供了获取整数部分和小数部分的接口。`Mcomplex` 类同样继承自 `MyType` 类,并且通过重载 `print` 函数来实现复数的输出。
在 `main` 函数中,我们分别创建了 `Mint`、`Mfloat` 和 `Mcomplex` 类型的对象,并对它们进行了加法运算,最后输出结果。在 `Mfloat` 类型的对象中,我们还调用了额外的接口,获取了整数部分和小数部分。
阅读全文