1. 잘못된 예시
#include<iostream>
using namespace std;
class Rational
{
public:
Rational(int numerator = 0, int denominator = 1)
: n(numerator), d(denominator)
{
cout << "Rational(int numerator, int denominator)" << endl;
}
Rational(const Rational& rational)
: n(rational.n), d(rational.d)
{
cout << "Rational(const Rational& rational)" << endl;
}
~Rational()
{
cout << "~Rational()" << endl;
}
public:
int n = 0, d = 0;
private:
friend const Rational& operator*(const Rational& lhs, const Rational& rhs);
};
const Rational& operator*(const Rational& lhs, const Rational& rhs)
{
cout << "Rational& operator*" << endl;
Rational result(lhs.n * rhs.n, lhs.d * rhs.d);
return result;
}
int main()
{
Rational r1(1, 2);
Rational r2(3, 4);
cout << "---------------operator 함수 호출-------------------" << endl;
Rational r3 = r1 * r2;
cout << "---------------operator 함수 종료-------------------" << endl;
cout << "r3.n = " << r3.n << endl;
cout << "r3.d = " << r3.d << endl;
return 0;
}
출력예시
Rational(int numerator, int denominator)
Rational(int numerator, int denominator)
---------------operator 함수 호출-------------------
Rational& operator*
Rational(int numerator, int denominator)
~Rational()
Rational(const Rational& rational)
---------------operator 함수 종료-------------------
r3.n = 3
r3.d = 8
~Rational()
~Rational()
~Rational()
2. 올바른 예시
#include<iostream>
using namespace std;
class Rational
{
public:
Rational(int numerator = 0, int denominator = 1)
: n(numerator), d(denominator)
{
cout << "Rational(int numerator, int denominator)" << endl;
}
Rational(const Rational& rational)
: n(rational.n), d(rational.d)
{
cout << "Rational(const Rational& rational)" << endl;
}
~Rational()
{
cout << "~Rational()" << endl;
}
public:
int n = 0, d = 0;
private:
friend const Rational operator*(const Rational& lhs, const Rational& rhs);
};
const Rational operator*(const Rational& lhs, const Rational& rhs)
{
cout << "Rational operator*" << endl;
return Rational(lhs.n * rhs.n, lhs.d * rhs.d);
}
int main()
{
Rational r1(1, 2);
Rational r2(3, 4);
cout << "---------------operator 함수 호출-------------------" << endl;
Rational r3 = r1 * r2;
cout << "---------------operator 함수 종료-------------------" << endl;
cout << "r3.n = " << r3.n << endl;
cout << "r3.d = " << r3.d << endl;
return 0;
}
출력예시
Rational(int numerator, int denominator)
Rational(int numerator, int denominator)
---------------operator 함수 호출-------------------
Rational operator*
Rational(int numerator, int denominator)
---------------operator 함수 종료-------------------
r3.n = 3
r3.d = 8
~Rational()
~Rational()
~Rational()