引言
我们说,编程语言的精髓在于封装,而面向对象语言完胜面向过程语言的原因就是具有更好的可封装性,而C++就是这样的一种多范型语言,常用而复杂的工作完全不必在每一份源文件中重敲,就好像我们不需要自己手写printf()和scanf()一样,自建一个属于自己的头文件,可以为编程提供很大的帮助,我今天就要推荐一下我自己原创的分数类(实际上C++STL库有分数类,只是性能很低,而且使用极其不方便,而我的这个分数类具有很多前者不具备的优点,而且颇具工程码风,易于理解与更新)。
注:此为原创文章,转载则务必说明原出处。
Code
将下面的代码存入一个名为fraction.h文件中,并在同目录下的源文件中加上:#include“fraction”即可使用该分数类(使用方法见后面)。
或是在IDE存放头文件的目录下添加一个名为fraction.h的文件,放入该代码并编译,然后便可在该电脑的任何地方创建.cpp文件,并用#include <fraction>包含该文件。
1 //拱大垲原创 2 //分数类实现~~~0.8.5 3 //fraction:分数 4 //numerator:分子 5 //denominator:分母 6 //输入分数时请以回车结尾 7 //输入部分如含有空格,则空格后面的部分会被忽略 8 //fraction可缩写为fac,计算机可以识别 9 10 #include <iostream> 11 #include <cmath> 12 13 #ifndef __fraction_h_ 14 #define __fraction_h_ 15 16 using namespace std; 17 18 namespace std 19 { 20 21 //分数类 22 class fraction 23 { 24 public: 25 static long long MCF(long long a, long long b); 26 27 friend ostream& operator<< (ostream& os,const fraction& the_fraction); 28 friend istream& operator>> (istream& is,fraction& the_fraction); 29 30 friend fraction operator+ (const fraction& the_fraction_a,const fraction& the_fraction_b); 31 friend fraction operator- (const fraction& the_fraction_a,const fraction& the_fraction_b); 32 friend fraction operator* (const fraction& the_fraction_a,const fraction& the_fraction_b); 33 friend fraction operator/ (const fraction& the_fraction_a,const fraction& the_fraction_b); 34 friend fraction operator+= (fraction& the_fraction_a,const fraction& the_fraction_b); 35 friend fraction operator-= (fraction& the_fraction_a,const fraction& the_fraction_b); 36 friend fraction operator*= (fraction& the_fraction_a,const fraction& the_fraction_b); 37 friend fraction operator/= (fraction& the_fraction_a,const fraction& the_fraction_b); 38 friend fraction operator- (const fraction& the_fraction); 39 friend fraction operator++ (fraction& the_fraction); 40 friend fraction operator++ (fraction& the_fraction,int); 41 friend fraction operator-- (fraction& the_fraction); 42 friend fraction operator-- (fraction& the_fraction,int); 43 44 friend bool operator> (fraction& the_fraction_a,const fraction& the_fraction_b); 45 friend bool operator< (fraction& the_fraction_a,const fraction& the_fraction_b); 46 friend bool operator>= (fraction& the_fraction_a,const fraction& the_fraction_b); 47 friend bool operator<= (fraction& the_fraction_a,const fraction& the_fraction_b); 48 friend bool operator== (fraction& the_fraction_a,const fraction& the_fraction_b); 49 friend bool operator!= (fraction& the_fraction_a,const fraction& the_fraction_b); 50 51 fraction(); 52 fraction(long long the_numerator); 53 fraction(long long the_numerator,long long the_denominator); 54 fraction(fraction the_fraction_a,fraction the_fraction_b); 55 56 double decimal(); 57 long long getnum(); 58 long long getden(); 59 void setnum(long long num); 60 void setden(long long den); 61 62 private: 63 long long numerator; 64 long long denominator; 65 66 }; 67 68 69 70 long long fraction::MCF(long long a, long long b) 71 { 72 return a==0? b:MCF(b%a,a); 73 } 74 75 76 77 ostream& operator<< (ostream& os,const fraction& the_fraction) 78 { 79 bool book=the_fraction.numerator>=0&&the_fraction.denominator>=0||the_fraction.numerator<0&&the_fraction.denominator<0; 80 if(book==false) 81 os<<"(-"; 82 if(the_fraction.denominator!=1) 83 os<<abs(the_fraction.numerator)<<"/"<<abs(the_fraction.denominator); 84 else 85 os<<abs(the_fraction.numerator); 86 if(book==false) 87 os<<")"; 88 return os; 89 } 90 91 istream& operator>> (istream& is,fraction& the_fraction) 92 { 93 char input[100]; 94 char ch; 95 bool mid=false; 96 bool is_pt=true; 97 the_fraction.numerator=the_fraction.denominator=0; 98 cin>>input; 99 for(int i=0;;i++) 100 { 101 ch=input[i]; 102 if(ch=='