用c++封装一个分数类,用来处理分数功能和运算,支持Array类使用
时间: 2024-03-26 22:39:35 浏览: 96
用C++语言描述分数类,并进行各种运算
好的,我可以为您编写一个C++的分数类,其中包含基本的分数运算和与Array类的互动。下面是一个基本的实现:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 分数类
class Fraction {
public:
Fraction(int n = 0, int d = 1) {
numerator = n;
denominator = d;
reduce();
}
// 重载加号运算符
Fraction operator+(const Fraction& f) const {
return Fraction(numerator * f.denominator + f.numerator * denominator, denominator * f.denominator);
}
// 重载减号运算符
Fraction operator-(const Fraction& f) const {
return Fraction(numerator * f.denominator - f.numerator * denominator, denominator * f.denominator);
}
// 重载乘号运算符
Fraction operator*(const Fraction& f) const {
return Fraction(numerator * f.numerator, denominator * f.denominator);
}
// 重载除号运算符
Fraction operator/(const Fraction& f) const {
return Fraction(numerator * f.denominator, denominator * f.numerator);
}
// 重载等于号运算符
bool operator==(const Fraction& f) const {
return numerator == f.numerator && denominator == f.denominator;
}
// 重载小于号运算符
bool operator<(const Fraction& f) const {
return numerator * f.denominator < denominator * f.numerator;
}
// 重载大于号运算符
bool operator>(const Fraction& f) const {
return numerator * f.denominator > denominator * f.numerator;
}
// 重载小于等于号运算符
bool operator<=(const Fraction& f) const {
return numerator * f.denominator <= denominator * f.numerator;
}
// 重载大于等于号运算符
bool operator>=(const Fraction& f) const {
return numerator * f.denominator >= denominator * f.numerator;
}
// 重载输出运算符
friend ostream& operator<<(ostream& os, const Fraction& f) {
os << f.numerator << "/" << f.denominator;
return os;
}
// 将分数约分
void reduce() {
int gcd_num = __gcd(numerator, denominator);
numerator /= gcd_num;
denominator /= gcd_num;
}
private:
int numerator, denominator; // 分子和分母
};
// Array类
template<typename T>
class Array {
public:
Array(int s = 0) {
size = s;
data = new T[size];
}
Array(const Array& a) {
size = a.size;
data = new T[size];
for (int i = 0; i < size; i++) {
data[i] = a.data[i];
}
}
~Array() {
delete[] data;
}
// 重载下标运算符
T& operator[](int index) {
return data[index];
}
// 重载加号运算符
Array operator+(const Array& a) const {
Array res(size + a.size);
for (int i = 0; i < size; i++) {
res.data[i] = data[i];
}
for (int i = 0; i < a.size; i++) {
res.data[size + i] = a.data[i];
}
return res;
}
// 重载输出运算符
friend ostream& operator<<(ostream& os, const Array& a) {
os << "[";
for (int i = 0; i < a.size - 1; i++) {
os << a.data[i] << ", ";
}
os << a.data[a.size - 1] << "]";
return os;
}
int getSize() const {
return size;
}
private:
int size; // 数组大小
T* data; // 数组数据
};
int main() {
Fraction f1(1, 2), f2(1, 3);
cout << f1 + f2 << endl; // 输出 5/6
Array<Fraction> a(3);
a[0] = f1;
a[1] = f2;
a[2] = f1 + f2;
cout << a << endl; // 输出 [1/2, 1/3, 5/6]
return 0;
}
```
这个分数类实现了加、减、乘、除、比较和约分等基本运算,并且通过模板实现了与Array类的互动。您可以根据自己的需求进一步扩展这个分数类。
阅读全文