栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++对运算符进行重载以有理数计算为例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++对运算符进行重载以有理数计算为例

#ifndef Rational_hpp
#define Rational_hpp

#include 
#include 
#include 
using namespace::std;
class Rational{
public:
    Rational();
    Rational(int numerator,int denominator);
    int getNumerator()const;
    int getDemominator()const;
    Rational add(const Rational& secondRational);
    Rational sub(const Rational& secondRational);
    Rational mult(const Rational& secondRational);
    Rational div(const Rational& secondRational);
    int compareTo(const Rational& secondRational);
    bool equal(const Rational& secondRational);
    int intValue();
    double doublevalue();
    string toString();
    
    Rational(int numerator);
    //重载简写运算符
    Rational& operator+=(const Rational& secondRational);
    Rational& operator-=(const Rational& secondRational);
    Rational& operator*=(const Rational& secondRational);
    Rational& operator/=(const Rational& secondRational);
    //重载运算符[]
    int& operator[](int index);
    //重载自增自减运算符(前缀)
    Rational& operator++();
    Rational& operator--();
    //重载自增自减运算符(后缀)
    Rational operator++(int dummy);
    Rational operator--(int dummy);
    //重载'+','-'运算符(正负)
    Rational operator+();
    Rational operator-();
    //重载<<,>>运算符,使用友元类,
    friend ostream& operator<<(ostream& ,const Rational&);
    friend istream& operator>>(istream&, Rational&);
    
    
private:
    int numerator,denominator;
    static int gcd(int n,int d);
};
//重载非成员函数还例如>,<,<=,>=,==,!=号以及+,-,*,/
Rational operator+(Rational& r1,Rational& r2);
Rational operator-(Rational& r1,Rational& r2);
Rational operator*(Rational& r1,Rational& r2);
Rational operator/(Rational& r1,Rational& r2);

#endif 
#include "Rational.hpp"
#include 
#include 
Rational::Rational(){
    numerator = 0;
    denominator = 1;
}
Rational::Rational(int numerator,int denominator){
    int factor = gcd(numerator, denominator);
    this->numerator = (numerator>0?1:-1) * abs(numerator)/factor;
    this->denominator = abs(denominator)/factor;
}
int Rational::gcd(int n, int d){
    int a = abs(n);
    int b = abs(d);
    int gcd = 1;
    for (int i=1; i<=a&&i<=b; i++) {
        if (a%i==0&&b%i==0) {
            gcd = i;
        }
    }
    return gcd;
}
Rational::Rational(int numerator){
    this->numerator = numerator;
    this->denominator = 1;
}
int Rational::getNumerator()const{
    return numerator;
}
int Rational::getDemominator()const{
    return denominator;
}
Rational Rational::add(const Rational &secondRational){
    int n;
    int d;
    n = numerator*secondRational.getDemominator()+denominator*secondRational.getNumerator();
    d=denominator*secondRational.getDemominator();
    return Rational(n,d);
}
Rational Rational::sub(const Rational &secondRational){
    int n;
    int d;
    n = numerator*secondRational.getDemominator()-denominator*secondRational.getNumerator();
    d=denominator*secondRational.getDemominator();
    return Rational(n,d);
}
Rational Rational::mult(const Rational &secondRational){
    int n,d;
    n = numerator*secondRational.getNumerator();
    d = denominator*secondRational.getDemominator();
    return Rational(n,d);
}
Rational Rational::div(const Rational &secondRational){
    int n,d;
    n = numerator*secondRational.getDemominator();
    d = denominator*secondRational.getNumerator();
    return Rational(n,d);
}
int Rational::compareTo(const Rational &secondRational){
    Rational temp =sub(secondRational);
    if (temp.getNumerator()<0) {
        return -1;
    }
    else if (temp.getNumerator()==0)
        return 0;
    else
        return 1;
}
bool Rational::equal(const Rational &secondRational){
    if (compareTo(secondRational)==0) {
        return true;
    }
    else
        return false;
}
int Rational::intValue(){
    return getNumerator()/getDemominator();
}
double Rational::doublevalue(){
    return 1.0*getNumerator()/getDemominator();
}
string Rational::toString(){
    stringstream ss;
    ss<1) {
        ss<<"/"<>(istream& in,Rational& firstRational){
    cout<<"请输入分子:";
    in>>firstRational.numerator;
    cout<<"请输入分母";
    in>>firstRational.denominator;
    return in;
}
Rational operator+(Rational& r1,Rational& r2){
    return r1.add(r2);
}
Rational operator-(Rational& r1,Rational& r2){
    return r1.sub(r2);
}
Rational operator*(Rational& r1,Rational& r2){
    return r1.mult(r2);
}
Rational operator/(Rational& r1,Rational& r2){
    return r1.div(r2);
}

测试

#include 
#include "Rational.hpp"
using namespace::std;
int main(int argc, const char * argv[]) {
    Rational a(3,4);
    Rational b(5,2);
    Rational c(1,2);
    cout<>d;
    cout< 

结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384901.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号