第八周实验报告4

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生 

* All rights reserved.

* 文件名称:实现分数类中的运算符重载,在任务3的基础上拓展。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成                           b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。

* 作    者:         于宸                       

* 完成日期:     2012    年 04  月  15 日

* 版 本 号:       V1.0   

* 对任务及求解方法的描述部分

* 输入描述: 

* 问题描述: 

* 程序输出:

 * 程序头部的注释结束

*/

 
 
[cpp]  view plain copy
  1. #include<iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. class CFraction  
  6. {  
  7. private:  
  8.     int nume;  // 分子  
  9.     int deno;  // 分母  
  10.     int gcd(int nu, int de);  
  11. public:  
  12.     //构造函数及运算符重载的函数声明  
  13.     CFraction(int nu = 0, int de = 1):nume(nu), deno(de){};         //构造函数,初始化用   
  14.     friend CFraction operator + (CFraction &c1,CFraction &c2);  
  15.     friend CFraction operator - (CFraction &c1,CFraction &c2);  
  16.     friend CFraction operator * (CFraction &c1,CFraction &c2);  
  17.     friend CFraction operator / (CFraction &c1,CFraction &c2);  
  18.     friend CFraction operator - (CFraction &c);  
  19.     friend CFraction operator + (CFraction &c, int s);  
  20.     friend CFraction operator - (CFraction &c, int s);  
  21.     friend CFraction operator * (CFraction &c, int s);  
  22.     friend CFraction operator / (CFraction &c, int s);  
  23.     friend CFraction operator + (int s, CFraction &c);  
  24.     friend CFraction operator - (int s, CFraction &c);  
  25.     friend CFraction operator * (int s, CFraction &c);  
  26.     friend CFraction operator / (int s, CFraction &c);  
  27.     bool operator > (CFraction &t);  
  28.     bool operator < (CFraction &t);  
  29.     bool operator >= (CFraction &t);  
  30.     bool operator <= (CFraction &t);  
  31.     bool operator == (CFraction &t);  
  32.     bool operator != (CFraction &t);  
  33.     void Simplify();                    //化简(使分子分母没有公因子)  
  34.     void display();  
  35. };  
  36. //重载函数的实现及用于测试的main()函数  
  37. void CFraction::Simplify()   
  38. {    
  39.     int n ;  
  40.   
  41.     if(nume < 0)  
  42.     {  
  43.         n = gcd(-nume, deno);  
  44.     }  
  45.     else  
  46.     {  
  47.         n = gcd(nume, deno);  
  48.     }  
  49.   
  50.     nume = nume / n;    
  51.   
  52.     deno = deno / n;   
  53.   
  54. }    
  55.   
  56. int CFraction::gcd(int nu, int de)      
  57. {      
  58.     int t, r, a, b;     
  59.   
  60.     a = nu;    
  61.   
  62.     b = de;    
  63.   
  64.     if (a < b)         
  65.     {      
  66.         t = a;      
  67.         a = b;                                       
  68.         b = t;      
  69.     }       
  70.   
  71.     while (b != 0)      
  72.     {      
  73.         r = a % b;      
  74.         a = b;      
  75.         b = r;      
  76.     }      
  77.   
  78.     return a;      
  79. }    
  80.   
  81. void CFraction::display()  
  82. {  
  83.     cout << nume << "/" << deno << endl;  
  84. }  
  85.   
  86. CFraction operator + (CFraction &c1,CFraction &c2)  
  87. {  
  88.     CFraction c;  
  89.   
  90.     c.nume = c1.nume * c2.deno + c2.nume * c1.deno;  
  91.   
  92.     c.deno = c1.deno * c2.deno;  
  93.   
  94.     return c;  
  95. }  
  96.   
  97. CFraction operator - (CFraction &c1,CFraction &c2)  
  98. {  
  99.     CFraction c;  
  100.   
  101.     c.nume = c1.nume * c2.deno - c2.nume * c1.deno;  
  102.   
  103.     c.deno = c1.deno * c2.deno;  
  104.   
  105.     return c;  
  106. }  
  107.   
  108. CFraction operator * (CFraction &c1,CFraction &c2)  
  109. {  
  110.     CFraction c;  
  111.   
  112.     c.nume = c1.nume * c2.nume;  
  113.   
  114.     c.deno = c1.deno * c2.deno;  
  115.   
  116.     return c;  
  117. }  
  118.   
  119. CFraction operator / (CFraction &c1,CFraction &c2)  
  120. {  
  121.     CFraction c;  
  122.   
  123.     c.nume = c1.nume * c2.deno;  
  124.   
  125.     c.deno = c1.deno * c2.nume;  
  126.   
  127.     return c;  
  128. }  
  129.   
  130. CFraction operator - (CFraction &c)  
  131. {  
  132.     c.nume = 0 - c.nume;  
  133.     return c;  
  134. }  
  135.   
  136. bool CFraction::operator > (CFraction &t)  
  137. {  
  138.     if(nume * t.deno > t.nume * deno)  
  139.     {  
  140.         return true;  
  141.     }  
  142.     else  
  143.     {  
  144.         return false;  
  145.     }  
  146. }  
  147.   
  148. bool CFraction::operator < (CFraction &t)  
  149. {  
  150.     if(nume * t.deno < t.nume * deno)  
  151.     {  
  152.         return true;  
  153.     }  
  154.     else  
  155.     {  
  156.         return false;  
  157.     }  
  158. }  
  159. bool CFraction::operator >= (CFraction &t)  
  160. {  
  161.     if(nume * t.deno >= t.nume * deno)  
  162.     {  
  163.         return true;  
  164.     }  
  165.     else  
  166.     {  
  167.         return false;  
  168.     }  
  169. }  
  170. bool CFraction::operator <= (CFraction &t)  
  171. {  
  172.     if(nume * t.deno <= t.nume * deno)  
  173.     {  
  174.         return true;  
  175.     }  
  176.     else  
  177.     {  
  178.         return false;  
  179.     }  
  180. }  
  181. bool CFraction::operator == (CFraction &t)  
  182. {  
  183.     if(nume * t.deno == t.nume * deno)  
  184.     {  
  185.         return true;  
  186.     }  
  187.     else  
  188.     {  
  189.         return false;  
  190.     }  
  191. }  
  192. bool CFraction::operator != (CFraction &t)  
  193. {  
  194.     if(nume * t.deno != t.nume * deno)  
  195.     {  
  196.         return true;  
  197.     }  
  198.     else  
  199.     {  
  200.         return false;  
  201.     }  
  202.   
  203. }  
  204.   
  205. CFraction operator + (CFraction &c, int s)  
  206. {  
  207.     CFraction c2 = c;  
  208.   
  209.     c2.nume = c.nume + s * c.deno;  
  210.   
  211.     return c2;  
  212. }  
  213.   
  214. CFraction operator - (CFraction &c, int s)  
  215. {  
  216.     CFraction c2 = c;  
  217.   
  218.     c2.nume = c.nume - s * c.deno;  
  219.   
  220.     return c2;  
  221. }  
  222.   
  223. CFraction operator * (CFraction &c, int s)  
  224. {  
  225.     CFraction c2 = c;  
  226.   
  227.     c2.nume = c.nume * s;  
  228.   
  229.     return c2;  
  230. }  
  231.   
  232. CFraction operator / (CFraction &c, int s)  
  233. {  
  234.     CFraction c2 = c;  
  235.   
  236.     c2.deno = c.deno * s;  
  237.   
  238.     return c2;  
  239. }  
  240.   
  241. CFraction operator + (int s, CFraction &c)  
  242. {  
  243.     CFraction c2 = c;  
  244.   
  245.     c2.nume = c.nume + s * c.deno;  
  246.   
  247.     return c2;  
  248. }  
  249.   
  250. CFraction operator - (int s, CFraction &c)  
  251. {  
  252.     CFraction c2 = c;  
  253.   
  254.     c2.nume = s * c.deno - c.nume;  
  255.   
  256.     return c2;  
  257. }  
  258.   
  259. CFraction operator * (int s, CFraction &c)  
  260. {  
  261.   
  262.     CFraction c2 = c;  
  263.   
  264.     c2.nume = s * c.nume;  
  265.   
  266.     return c2;  
  267. }  
  268.   
  269. CFraction operator / (int s, CFraction &c)  
  270. {  
  271.   
  272.     CFraction c2 = c;  
  273.   
  274.     c2.nume = s * c.deno;  
  275.   
  276.     c2.deno = c.nume;  
  277.   
  278.     return c2;  
  279. }  
  280.   
  281. void main()  
  282. {  
  283.     CFraction c1(3, 5), c2(2, 3), c;  
  284.   
  285.     cout << "c1 =" ;  
  286.   
  287.     c1.Simplify();  
  288.   
  289.     c1.display();  
  290.   
  291.     cout << "c2 =" ;  
  292.   
  293.     c2.Simplify();  
  294.   
  295.     c2.display();  
  296.   
  297.     c = c1 + c2;  
  298.   
  299.     c.Simplify();  
  300.   
  301.     cout << "c1 + c2 =";  
  302.   
  303.     c.display();  
  304.   
  305.     c = c1 - c2;  
  306.   
  307.     c.Simplify();  
  308.   
  309.     cout << "c1 - c2 =";  
  310.   
  311.     c.display();  
  312.   
  313.     c = c1 * c2;  
  314.   
  315.     c.Simplify();  
  316.   
  317.     cout << "c1 * c2 =";  
  318.   
  319.     c.display();  
  320.   
  321.     c = c1 / c2;  
  322.   
  323.     c.Simplify();  
  324.   
  325.     cout << "c1 / c2 =";  
  326.   
  327.     c.display();  
  328.   
  329.     c = c1 + 2;  
  330.   
  331.     cout << "c1 + 2 =";  
  332.   
  333.     c.Simplify();  
  334.   
  335.     c.display();  
  336.   
  337.     c = 2 - c2;  
  338.   
  339.     cout << "2 - c2 =";  
  340.   
  341.     c.Simplify();  
  342.   
  343.     c.display();  
  344.   
  345.     c = c1 * 2;  
  346.   
  347.     cout << "c1 * 2 =";  
  348.   
  349.     c.Simplify();  
  350.   
  351.     c.display();  
  352.   
  353.     c = 2 / c2;  
  354.   
  355.     cout << "2 / c2 =";  
  356.   
  357.     c.Simplify();  
  358.   
  359.     c.display();  
  360.   
  361.     c = - c1;  
  362.   
  363.     cout << "-c1 =";  
  364.   
  365.     c.display();  
  366.   
  367.   
  368.     if(c1 > c2)  
  369.     {  
  370.         cout << "c1 > c2" << endl;  
  371.     }  
  372.   
  373.     if(c1 < c2)  
  374.     {  
  375.         cout << "c1 < c2" << endl;  
  376.     }  
  377.   
  378.     if(c1 >= c2)  
  379.     {  
  380.         cout << "c1 ≥ c2" << endl;  
  381.     }  
  382.   
  383.     if(c1 <= c2)  
  384.     {  
  385.         cout << "c1 ≤ c2" << endl;  
  386.     }  
  387.   
  388.     if(c1 == c2)  
  389.     {  
  390.         cout << "c1 = c2" << endl;  
  391.     }  
  392.   
  393.     if(c1 != c2)  
  394.     {  
  395.         cout << "c1 ≠ c2" << endl;  
  396.     }  
  397.   
  398.     system("pause");  
  399. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值