유리한 숫자에 대한 연산을 수행하기위한 다음 코드가 실제로 할당 작업과 스트림 삽입 연산자 < <을 개체에 오버로드하는지 여부를 알고 싶습니다. 나는 C++에별로 좋지 않습니다. 그래서 이것은 제게 새로운 것이지만, 제가 이미 말할 수있는 것에서 그것은 이미 생각한 것입니다.할당 작업/스트림 오버로드
/*
*
* C++ version
*
*/
/* rational.h */
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
using std::ostream;
struct rational {
rational(int = 0, int = 1);
rational operator+(const rational &) const;
rational operator-(const rational &) const;
rational operator*(const rational &) const;
rational operator/(const rational &) const;
rational operator+(int) const;
rational operator-(int) const;
rational operator*(int) const;
rational operator/(int) const;
friend rational operator+(int, const rational &);
friend rational operator-(int, const rational &);
friend rational operator*(int, const rational &);
friend rational operator/(int, const rational &);
friend ostream &operator<<(ostream &, const rational &);
private:
int den;
int num;
};
#endif /* RATIONAL_H */
/* rational.cc */
#include <iostream>
#include "rational.h"
rational::rational(int num, int den) : num(num), den(den) {}
rational rational::operator+(const rational &o) const {
return rational(num * o.den + o.num * den, den * o.den);
}
rational rational::operator+(int n) const {
return rational(num + n * den, den);
}
rational rational::operator-(const rational &o) const {
return rational(num * o.den - o.num * den, den * o.den);
}
rational rational::operator-(int n) const {
return rational(num - n * den, den);
}
rational rational::operator*(const rational &o) const {
return rational(num * o.num, den * o.den);
}
rational rational::operator*(int n) const {
return rational(num * n, den);
}
rational rational::operator/(const rational &o) const {
return rational(num * o.den, den * o.num);
}
rational rational::operator/(int n) const {
return rational(num, den * n);
}
rational operator+(int n, const rational &o) {
return o + n;
}
rational operator-(int n, const rational &o) {
return rational(n) - o;
}
rational operator*(int n, const rational &o) {
return o * n;
}
rational operator/(int n, const rational &o) {
return rational(n)/o;
}
ostream &operator<<(ostream &out, const rational &o) {
out << '(' << o.num << "/" << o.den << ')';
return out;
}
/* main.cc */
#include <iostream>
#include "rational.h"
using std::cout;
using std::endl;
int main(void) {
rational a(1, 2);
rational b(2, 3);
int i = 5;
cout << a << " + " << b << " = " << a + b << endl;
cout << a << " - " << b << " = " << a - b << endl;
cout << a << " * " << b << " = " << a * b << endl;
cout << a << "/" << b << " = " << a/b << endl;
cout << a << " + " << i << " = " << a + i << endl;
cout << a << " - " << i << " = " << a - i << endl;
cout << a << " * " << i << " = " << a * i << endl;
cout << a << "/" << i << " = " << a/i << endl;
cout << i << " + " << a << " = " << i + a << endl;
cout << i << " - " << a << " = " << i - a << endl;
cout << i << " * " << a << " = " << i * a << endl;
cout << i << "/" << a << " = " << i/a << endl;
return 0;
}
하나의 기능 만 제공하면됩니까? – user1880760
'operator ='내가 준, 네. alestanis의 버전도 이제는 작동하지만'this->'는 선택 사항입니다 (그는 Java 월드와 같아야합니다)) – phaazon
이고 생성자가 너무 옳은가요? – user1880760