class Decimal {
private:
int int_part,num,denom,nod;
public:
Decimal() { int_part=0;num=0;denom=0;nod=0; }
Decimal(int a,int b,int c) { int_part=a;num=b;denom=c; }
friend istream &operator>>(istream &stream,Decimal &obj);
friend ostream &operator<<(ostream &stream,Decimal &obj);
Decimal operator+(Decimal &obj);
Decimal &operator=(Decimal &obj);
Decimal operator-(Decimal &obj);
Decimal operator*(Decimal &obj);
Decimal operator/(Decimal &obj);
void Set_nod();
int NOD(int a,int b);
};
Перегрузка операторов ввода/вывода
Класс:
Код:
Перегрузка оператор + и оператора выводв:
Код:
Decimal Decimal::operator+(Decimal &obj) {
Decimal tmp;
tmp.int_part=0; // на это внимания не обращайте
tmp.num=num*obj.denom+obj.num*denom;
tmp.denom=denom*obj.denom;
tmp.nod=NOD(tmp.num,tmp.denom);
return tmp;
}
ostream &operator<<(ostream &stream,Decimal &obj) {
if(obj.nod>0) {
obj.num/=obj.nod;
obj.denom/=obj.nod;
}
if(flag=='Y') {
if(obj.denom==1) stream << obj.int_part + obj.num;
else stream << obj.int_part << " " << obj.num << "/" << obj.denom;
}
else {
if(obj.denom==1) stream << obj.num;
else stream << obj.num << "/" << obj.denom;
}
return stream;
}
Decimal tmp;
tmp.int_part=0; // на это внимания не обращайте
tmp.num=num*obj.denom+obj.num*denom;
tmp.denom=denom*obj.denom;
tmp.nod=NOD(tmp.num,tmp.denom);
return tmp;
}
ostream &operator<<(ostream &stream,Decimal &obj) {
if(obj.nod>0) {
obj.num/=obj.nod;
obj.denom/=obj.nod;
}
if(flag=='Y') {
if(obj.denom==1) stream << obj.int_part + obj.num;
else stream << obj.int_part << " " << obj.num << "/" << obj.denom;
}
else {
if(obj.denom==1) stream << obj.num;
else stream << obj.num << "/" << obj.denom;
}
return stream;
}
Функция main
Код:
void main() {
Decimal A(0,3,2),B(0,2,3);
cout << A+B; // ошибка возникает здесь
}
Decimal A(0,3,2),B(0,2,3);
cout << A+B; // ошибка возникает здесь
}
Переменная flag отвечает за то, вводилась ли целая часть или нет.
Ошибка:
Error E2094 decimal.cpp 104: 'operator<<' not implemented in type 'ostream' for arguments of type 'Decimal' in function main()