// OperatorT.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <iostream>//运算符的重载
//计算有理数rational的 + - * /class Rational
{
public:Rational();//构造函数初始化Rational(int numer, int denom);Rational operator +(Rational  d);// Rational operator -(Rational  d);Rational operator *(Rational  d);Rational operator /(Rational  d);void print();
private:friend std::ostream &operator<<(std::ostream &os, Rational f);//友元函数用friend声明,可以访问类中的私有变量void normalize();//对分数简化处理int nu;int de;
};
Rational::Rational()
{nu = 0;de = 0;
}
Rational::Rational(int numer, int denom)
{nu = numer;de = denom;normalize();//简化
}
Rational Rational::operator +(Rational  d)
{Rational r;r.nu = nu *d.de + de*d.nu;r.de = de * d.de;return r;
}Rational Rational::operator-(Rational  d)
{//Rational r;//r.nu = nu *d.de - de*d.nu;//r.de = de * d.de;//return r;d.nu = -d.nu;return operator +(d);
}Rational Rational::operator*(Rational  d)
{Rational r;r.nu = nu * d.nu;r.de = de * d.de;return r;
}
Rational Rational::operator/(Rational   d)
{//Rational r;//r.nu = nu * d.de;//r.de = de * d.nu;//return r;int temp;temp = d.nu;d.nu = d.de;d.de = temp;return operator*(d);
}
void Rational::print()
{normalize();if (nu%de == 0){std::cout << nu / de << std::endl; //<< "\n" << "\n"}else{std::cout << nu << "/" << de  << std::endl;}
}
//对分数的简化处理
//1.分母为正
//2.欧几里得算法对分数进行化简
void Rational::normalize()
{if (de < 0)//分母小于0,分子分母都取负{nu = -nu;de = -de;}int a = abs(nu);int b = abs(de);while (b > 0)   //好!{int t = a%b;a = b;//被除数变除数,余数变被除数...循环..直到余数为0b = t;}nu /= a;de /= a;
}
//使用前先声明 // 对 << 进行重载
std::ostream & operator<<(std::ostream & os, Rational f);
int main()
{Rational r1(-3, 5), r2(-6, -9);Rational r3, r4, r5, r6;r3 = r1 + r2;r4 = r1 - r2;r5 = r1 * r2;r6 = r1 / r2;std::cout << "Src: "<<"\n";std::cout << "r1= "; r1.print();std::cout << "r2= "; r2.print();std::cout << "Result: "<<"\n";//std::cout << "r3= "; r3.print();//std::cout << "r4= "; r4.print();//std::cout << "r5= "; r5.print();//std::cout << "r6= "; r6.print();////对<<重载 应用std::cout <<"("<< r1 <<")"<< " + " <<"("<< r2  <<")"<< " = " << r1 + r2 << std::endl;std::cout <<"("<< r1 <<")"<< " - " << "("<< r2  <<")"<< " = " << r1 - r2 << std::endl;std::cout <<"("<< r1 <<")"<< " * " << "("<< r2  <<")"<< " = " << r1 * r2 << std::endl;std::cout <<"("<< r1 <<")"<< " / " << "("<< r2  <<")" << " = " << r1 / r2 << std::endl;system("pause");return 0;
}
// 对 << 进行重载的实现
std::ostream & operator<<(std::ostream & os, Rational f)
{Rational f1 = f;f1.normalize();os << f1.nu << "/" << f1.de;return os;
}

C++_Operator Overloading(运算符重载 | 计算有理数的加减乘除)相关推荐

  1. C++运算符重载 实现有理数(分数)的加减法

    在main前面打一个断电,单步调试,整个程序更易理解. #include<iostream> #include<string> #include<stdlib.h> ...

  2. 计算时间:一个运算符重载示例

    题目 今天早上在Priggs的账户上花费2小时35分钟,下午又花费了2小时40分钟,则总共花了多少时间. mytime0.h #ifndef MYTIME0_H #define MYTIME0_Hcl ...

  3. Java为什么不提供运算符重载?

    从C ++到Java,一个显而易见的未解决问题是Java为什么不包括运算符重载? 不是Complex a, b, c; a = b + c;吗Complex a, b, c; a = b + c; C ...

  4. C++学习笔记(10)运算符重载,友元函数,友元类

    c++允许我们为运算符定义专门的函数,这被称为运算符重载: 运算符可以简化字符串的操作,'+',以及使用关系运算符比较字符串,[ ]运算符访问向量中的元素: 例如: #include <iost ...

  5. 运算符重载的基本规则和习语是什么?

    问: 注意:答案是按特定顺序给出的,但是由于许多用户根据投票而不是给出的时间对答案进行排序,所以这里是一个按最有意义的顺序排列的答案索引: C++中运算符重载的一般语法 C++中运算符重载的三个基本规 ...

  6. c++重载(以运算符重载为主)

    重载(OverLoading)是面向对象程序设计多态性的一种体现.所谓重载,是指"同一标识符"在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符.也就是说,重载可 ...

  7. C++中的运算符重载基础

    1.C++中的运算符重载基础 所谓重载,就是赋予新的含义.函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作.运算符重载(Operator Ov ...

  8. C++中的运算符重载

    1.Cpp中的重载运算符和重载函数 C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载.重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但 ...

  9. C++——运算符重载operator

    C++--运算符重载operator C++ prime plus第11章,运算符重载是C++的一种多态.运算符重载格式如下: operator运算符(argument-list) 1.做普通函数重载 ...

  10. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

最新文章

  1. Echarts4.0 使用系列——折线图,这里可能有你需要的
  2. 皮一皮:可怜的西瓜...
  3. PHPSTORM下安装XDEBUG
  4. java课堂作业(一)
  5. 想加入IT行业为何建议你学Python,学完真值!
  6. 2017年春季计算机试题,【2017年整理】计算机试题.doc
  7. 聊聊数据权限哪些事儿
  8. 云计算数据中心Spine-Leaf模型简介
  9. Adobe 全家桶关闭自动更新?技巧来啦!
  10. 21模块-orientation【管理设备的方向信息】
  11. pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
  12. zemax中非序列添加相位面_zemax非序列照明技巧汇编
  13. java重新温习基础笔记
  14. c语言3x3矩阵转置 数组指针 接口(int(※p)[3],int n)
  15. Blender Python相关操作指令(bpy)
  16. 网络系列--SDN安全
  17. 如何给电脑硬盘分区?
  18. Sql有条件的插入语句
  19. placement new理解
  20. 准研究生获刑3年!竟是因为……

热门文章

  1. 安全运维 - Windows系统维护
  2. 使用powershell执行在线脚本的具体示例
  3. spring教程(一):简单实现(转)
  4. java之SpringMVC的controller配置总结
  5. [The Diary] 11.9 The Final Day
  6. openstack trove实例状态转换条件--Mitaka版本
  7. vim基础学习之自动补全功能
  8. JS疑难点和GC原理
  9. 真正认识 realloc 的工作方式(转载)
  10. .NET LINQ 限定符操作