Перегрузка операторов += -=

Это класс дробей. Мне нужно сделать перегрузку операторов += и -=. + и - я сделал. На остальное голова не варит. Помогите. main.cpp

#include <iostream>
#include "module.h"
using namespace std;

int main(int argc, char** argv) {

Decimal d(1,2);
Decimal b;
b=d+1;
cout << b << " ";
b=1+d;
cout << b << " ";

Decimal dc1(2, 5);
Decimal dc2(3, 9);
 dc1 +=dc2;
cout << dc1 << " ";

Decimal f(6,24);
f.simplify();
cout<<f<<" ";
cout<<"-f= "<<-f;
return 0;
}

module.cpp

#include "module.h"

Decimal::Decimal(){
    this->numeration=0;
    this->denomination=1;
}
Decimal::Decimal(int a){
    this->numeration=a;
    this->denomination=1;
}
Decimal::Decimal(int a,int b){
    this->numeration=a;
    if(b!=0)
        this->denomination=b;
    else
        this->denomination=1;
}
Decimal::Decimal(const Decimal &d){
    this->numeration=d.numeration;
    this->denomination=d.denomination;
}
void Decimal::set_numerator(int a){
    this->numeration=a;
}
void Decimal::set_denominator(int a){
    if(a!=0)
        this->denomination=a;
    else
        this->denomination=1;
}
int Decimal::get_numerator(){
    return this->numeration;
}
int Decimal::get_denominator(){
    return this->denomination;
}
void Decimal::simplify(){
    int c=1;
    if(this->numeration<0)
        c=-1;
    for(int i=this->numeration;i>1;i--){
        if((this->numeration%i==0)&&(this->denomination%i==0)){
        this->numeration/=i;
        this->denomination/=i;
        }
    }
}
Decimal Decimal::operator+(const Decimal &d){
    Decimal rez;
    int a,b,c,i=2;
    if (this->denomination>d.denomination){
        c=a=d.denomination;
        b=this->denomination;
    }else{
        c=a=this->denomination;
        b=d.denomination;
    }
    while(c%b!=0){
        c=a;
        c*=i;
        i++;
    }
    rez.denomination=c;
    rez.numeration=this->numeration*(c/this->denomination)+d.numeration*(c/d.denomination);
    return rez;
}
Decimal Decimal::operator+(int a){
    Decimal rez;
    rez.denomination=this->denomination;
    rez.numeration=this->numeration+a*this->denomination;
    return rez;
}
Decimal operator +(int a,const Decimal &d){
    Decimal rez;
    rez.denomination=d.denomination;
    rez.numeration=d.numeration+a*d.denomination;
    return rez;
}



Decimal Decimal::operator+=(const Decimal &d){
    this->numeration *= d.denomination; // 3/4 += 1/5 => 3/4 + 1/5 = (3*5 + 1*4)/(4*5)
    this->numeration += this->denomination * d.numeration;
    this->denomination *= d.denomination;
    return *this;
}



Decimal Decimal::operator-(const Decimal &d){
    Decimal rez;
    int a,b,c,i=2;
    if (this->denomination>d.denomination){
        c=a=d.denomination;
        b=this->denomination;
    }else{
        c=a=this->denomination;
        b=d.denomination;
    }
    while(c%b!=0){
        c=a;
        c*=i;
        i++;
    }
    rez.denomination=c;
    rez.numeration=this->numeration*(c/this->denomination)-d.numeration*(c/d.denomination);
    return rez;
}
Decimal Decimal::operator-(int a){
    Decimal rez;
    rez.denomination=this->denomination;
    rez.numeration=this->numeration-a*this->denomination;
    return rez;
}
Decimal operator -(int a,const Decimal &d){
    Decimal rez;
    rez.denomination=d.denomination;
    rez.numeration=d.numeration-a*d.denomination;
    return rez;
}
Decimal Decimal::operator-(){
    Decimal rez;
    rez.numeration=this->numeration*-1;
    rez.denomination=this->denomination;
    return rez;
}


Decimal Decimal::operator-=(const Decimal &d){
    this->numeration *= d.denomination; //(3*5 - 1*4)/(4*5)
    this->numeration -= this->denomination * d.numeration;
    this->denomination *= d.denomination;
    return *this;
}





Decimal Decimal::operator *(const Decimal &d){
    Decimal rez;
    rez.numeration=this->numeration*d.numeration;
    rez.denomination=this->denomination*d.denomination;
    return rez;
}
Decimal Decimal::operator*(int a){
    Decimal rez;
    rez.denomination=this->denomination;
    rez.numeration=this->numeration*a;
    return rez;
}
Decimal operator *(int a,const Decimal &d){
    Decimal rez;
    rez.denomination=d.denomination;
    rez.numeration=d.numeration*a;
    return rez;
}
Decimal Decimal::operator /(const Decimal &d){
    Decimal rez;
    rez.numeration=this->numeration*d.denomination;
    rez.denomination=this->denomination*d.numeration;
    return rez;
}
Decimal Decimal::operator/(int a){
    Decimal rez;
    rez.denomination=this->denomination*a;
    rez.numeration=this->numeration;
    return rez;
}
Decimal operator/(int a,const Decimal &d){
    Decimal rez;
    rez.denomination=d.denomination*a;
    rez.numeration=d.numeration;
    return rez;
}
bool Decimal::operator ==(const Decimal &d){
    if((this->numeration==d.numeration)&&(this->denomination==d.denomination))
        return true;
    else
        return false;
}
bool Decimal::operator >(const Decimal &d){
    if(double(this->numeration)/double(this->denomination)>double(d.numeration)/double(d.denomination))
        return true;
    else
        return false;
}
bool Decimal::operator <(const Decimal &d){
    if(double(this->numeration)/double(this->denomination)<double(d.numeration)/double(d.denomination))
        return true;
    else
        return false;
}
bool Decimal::operator >=(const Decimal &d){
    if(double(this->numeration)/double(this->denomination)>=double(d.numeration)/double(d.denomination))
        return true;
    else
        return false;
}
bool Decimal::operator <=(const Decimal &d){
    if(double(this->numeration)/double(this->denomination)<=double(d.numeration)/double(d.denomination))
        return true;
    else
        return false;
}
bool Decimal::operator !=(const Decimal &d){
    if((this->numeration!=d.numeration)||(this->denomination!=d.denomination))
        return true;
    else
        return false;
}
Decimal Decimal::operator =(const Decimal &d){
    this->numeration=d.numeration;
    this->denomination=d.denomination;
    return *this;
}
Decimal::operator float(){
    float rez;
    rez=float(this->numeration)/float(this->denomination);
    return rez;
}
Decimal::operator double(){
    double rez;
    rez=double(this->numeration)/double(this->denomination);
    return rez;
}
ostream& operator<< (ostream &out, const Decimal &d){
    out << d.numeration << "/" << d.denomination;
    return out;
}

istream& operator>> (istream &in, Decimal &d){
    in >> d.numeration;
    in >> d.denomination;
    return in;
}

module.h

#ifndef CLASS_DATETIME_H
#define CLASS_DATETIME_H
#include <iostream>

using namespace std;
class Decimal{
private:
int numeration, denomination;
public:
Decimal();
Decimal(int a);
Decimal(int a,int b);
Decimal(const Decimal &d);
void set_numerator(int a);
void set_denominator(int a);
inline int get_numerator();
inline int get_denominator();
void simplify();
Decimal operator+(const Decimal &d);
Decimal operator+(int a);
Decimal operator+=(const Decimal &d);
Decimal operator+=(int a);
Decimal operator-(const Decimal &d);
Decimal operator-(int a);
Decimal operator-=(const Decimal &d);
Decimal operator-=(int a);
Decimal operator-();
Decimal operator*(const Decimal &d);
Decimal operator*(int a);
Decimal operator/(const Decimal &d);
Decimal operator/(int a);
bool operator ==(const Decimal &d);
bool operator >(const Decimal &d);
bool operator <(const Decimal &d);
bool operator >=(const Decimal &d);
bool operator <=(const Decimal &d);
bool operator !=(const Decimal &d);
bool operator =(const Decimal &d);
operator float();
operator double();
friend ostream& operator<< (ostream &out, const Decimal &d);
friend istream& operator>> (istream &in, Decimal &d);
friend Decimal operator +(int a,const Decimal &d);
friend Decimal operator +=(int a,const Decimal &d);
friend Decimal operator -(int a,const Decimal &d);
friend Decimal operator -=(int a,const Decimal &d);
friend Decimal operator *(int a,const Decimal &d);
friend Decimal operator /(int a,const Decimal &d);
};
#endif

Вывод компилятора:

[Error] no 'Decimal Decimal::operator-=(const Decimal&)' member function declared in class 'Decimal' [Error] no 'Decimal Decimal::operator+=(const Decimal&)' member function declared in class 'Decimal' recipe for target 'module.o' failed


Ответы (1 шт):

Автор решения: DSuhoi
Decimal Decimal::operator+=(const Decimal &d){
    this->numeration *= d.denomination; // 3/4 += 1/5 => 3/4 + 1/5 = (3*5 + 1*4)/(4*5)
    this->numeration += this->denomination * d.numeration;
    this->denomination *= d.denomination;
    return *this;
}

Decimal Decimal::operator-=(const Decimal &d){
    this->numeration *= d.denomination; //(3*5 - 1*4)/(4*5)
    this->numeration -= this->denomination * d.numeration;
    this->denomination *= d.denomination;
    return *this;
}
→ Ссылка