C++程序设计----- 运算符的重载 【项目3-分数类中的运算符重载】
2014-03-21 10:53
176 查看
/* * 程序的版权和版本声明部分 * Copyright (c)2013, 在校学生 * All rightsreserved. * 文件名称: 项目3.cpp * 作 者:刘旺 * 完成日期:2014年3月21日 * 版本号: v1.0 * * 输入描述: * 问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、 * 求反、比较(6种关系)的运算。可以从第5周项目2的代码开始工作。 * 程序输出: * 问题分析: */ #include <iostream> using namespace std ; class CFraction { private: int nume; // 分子 int deno; // 分母 public: //构造函数及运算符重载的函数声明 CFraction():nume(0),deno(0){} CFraction(int n, int d):nume(n),deno(d){} CFraction operator+(CFraction &cp) ; CFraction operator-(CFraction &cp) ; CFraction operator*(CFraction &cp) ; CFraction operator/(CFraction &cp) ; void operator<(CFraction &cp) ; void operator>(CFraction &cp) ; void operator-() ; void print() ; //显示 }; CFraction CFraction::operator+(CFraction &cp) { CFraction p ; if(deno>cp.deno) { if(deno%cp.deno==0) { p.deno = deno ; p.nume = (deno/cp.deno*cp.nume)+nume ; } else { p.deno = deno*cp.deno ; p.nume = cp.nume*deno+nume*cp.deno ; } } else if(deno < cp.deno) { if(cp.deno%deno==0) { p.deno = cp.deno ; p.nume = (cp.deno/deno*nume)+cp.nume ; } else { p.deno = deno*cp.deno ; p.nume = cp.nume*deno+nume*cp.deno ; } } else { p.nume = nume+cp.nume ; p.deno = deno ; } return p ; } CFraction CFraction::operator-(CFraction &cp) { CFraction p ; if(deno>cp.deno) { if(deno%cp.deno==0) { p.deno = deno ; p.nume = nume-(deno/cp.deno*cp.nume) ; } else { p.deno = deno*cp.deno ; p.nume = nume*cp.deno-cp.nume*deno; } } else if(deno < cp.deno) { if(cp.deno%deno==0) { p.deno = cp.deno ; p.nume = (cp.deno/deno*nume)-cp.nume ; } else { p.deno = deno*cp.deno ; p.nume = nume*cp.deno-cp.nume*deno ; } } else { p.nume = nume-cp.nume ; p.deno = deno ; } return p ; } CFraction CFraction::operator*(CFraction &cp) { CFraction p ; p.nume = nume*cp.nume ; p.deno = deno*cp.deno ; return p ; } CFraction CFraction::operator/(CFraction &cp) { CFraction p ; p.nume = nume*cp.deno ; p.deno = deno*cp.nume ; return p ; } void CFraction::print() { if(nume==0) { cout << nume << endl ; } else if(nume>=deno&&nume%deno==0) { cout << nume/deno << endl ; } else if(nume<deno&&deno%nume==0) { if(nume<0) { cout << "-1" << '/' << deno << endl ; } else cout << '1' << '/' << deno << endl ; } else { cout << nume << '/' << deno << endl ; } } void CFraction::operator>(CFraction &cp) { if(nume*cp.deno>deno*cp.nume) { cout << nume << '/' << deno << "大于" << cp.nume << '/' << cp.deno << endl ; } else if(nume*cp.deno==deno*cp.nume) { cout << nume << '/' << deno << "等于" << cp.nume << '/' << cp.deno << endl ; } else { cout << nume << '/' << deno << "小于" << cp.nume << '/' << cp.deno << endl ; } } void CFraction::operator<(CFraction &cp) { if(nume*cp.deno>deno*cp.nume) { cout << nume << '/' << deno << "大于" << cp.nume << '/' << cp.deno << endl ; } else if(nume*cp.deno==deno*cp.nume) { cout << nume << '/' << deno << "等于" << cp.nume << '/' << cp.deno << endl ; } else { cout << nume << '/' << deno << "小于" << cp.nume << '/' << cp.deno << endl ; } } void CFraction::operator-() { nume = -nume ; } int main() { CFraction rt(1,2) ; CFraction ra(2,3) ; CFraction d = rt + ra ; cout << "1/2 + 2/3 = "; d.print() ; cout << "1/2 - 2/3 = "; d = rt - ra ; d.print() ; d = rt * ra ; cout << "1/2 * 2/3 = "; d.print() ; d = rt / ra ; cout << "1/2 / 2/3 = "; d.print() ; rt > ra ; -rt ; cout << "1/2取反:" ; rt.print() ; return 0 ; }
相关文章推荐
- C++第8周(春)项目3 分数类中的运算符重载
- 运算符重载 编程题#2(Coursera 程序设计与算法 专项课程3 C++程序设计;重载:& operator-)
- 第九周上机实践项目3-分数类中的运算符重载(续 重载输入输出流)
- C++第8周项目3 - 分数类中的运算符重载
- C++程序设计-第9周 运算符的重载(之二)
- C++走向远洋——54(项目一2、分数类的重载、取倒数)
- C++ 运算符重载二(一元运算符重载)
- 第八周项目三分数类中的运算符重载
- C++走向远洋——55(项目一3、分数类的重载、>><<的重载)
- C++第9周项目3 - 实现分数类中的运算符重载
- 第八周项目三-实现分数类的运算符的重载
- 运算符重载 编程题#1(Coursera 程序设计与算法 专项课程3 C++程序设计;重载:& operator =, operator =)
- C++程序设计语言练习11.4 算术运算符重载的类成员函数写法
- 【项目1】实现复数类中的运算符重载--用类的友元函数,完成运算符的重载;
- C++ 类型转化(运算符重载函数)和基本运算符重载(自增自减)
- 浅谈C++类型转化(运算符重载函数)和基本运算符重载(自增自减)
- C++程序设计语言练习11.4 算术运算符重载的友元写法
- /项目3-分数类中的运算符重载
- 15第九周项目三——分数类中的运算符的重载(续)
- C++ 第十三周 多态性 项目1【项目1-分数类中的运算符重载】