題目
設計一個分數類 F r a c t i o n Fraction Fraction,再設計一個名為 M a x e l e m e n t Max_element Maxe?lement 的函數模板,能夠求數組中最大的元素,并用該模板求一個 F r a c t i o n Fraction Fraction 數組中的最大元素。
C o d e Code Code
#include <bits/stdc++.h>
using namespace std;template<class T>
T Max_element(T a[], int len) {T maxn = a[0];for (int i = 1; i < len; i ++) {if (a[i] > maxn) {maxn = a[i];}}return maxn;
}class Fraction{int numerator; // 分子int denominator; // 分母
public:Fraction(int n, int d):numerator(n), denominator(d){if (denominator < 0) { // 確保分母為正denominator *= -1;numerator *= -1;}}bool operator> (const Fraction& f)const{return numerator * f.denominator > f.numerator * denominator;}bool operator== (const Fraction& f)const{return numerator * f.denominator == f.numerator * denominator;}friend ostream& operator<< (ostream& o, const Fraction& f);
};// 重載<<使得分數對象可以通過cout輸出
ostream& operator<< (ostream& os, const Fraction& f) {os << f.numerator << "/" << f.denominator;return os;
}
/*這里的os引用的是主函數中的cout,返回os是為了實現<<的連續使用。參數os只能是ostream的引用,而不能是ostream的對象,因為ostream的復制構造函數是私有的,不能生成ostream參數對象。*/int main() {int a[5] = {1, 5, 2, 3, 4};Fraction f[4] = {Fraction(8, 6), Fraction(-8, 4), Fraction(3, 2), Fraction(5, 6)};cout << Max_element(a, 5) << "\n";cout << Max_element(f, 4) << "\n";return 0;
}