先日、クラスメンバー関数を使用して2パラメータ演算子をオーバーロードしようとしたときに問題が発生しました。参照してみましたが、何も変わりませんでした。コンパイラは、クラス自体と同じ型の複数の引数を取るメンバー関数を記述できないと言いました。何故ですか?
コードは次のとおりです。
class Fraction
{
public:
Fraction(int num=1, int den=1): numerator(num), denominator(den) {}
Fraction(const Fraction& r): numerator(r.numerator), denominator(r.denominator) {}
Fraction& operator=(const Fraction&);
Fraction& operator*(const Fraction&, const Fraction&);
private:
int numerator, denominator;
};
Fraction& Fraction::operator=(const Fraction& r)
{
numerator = r.numerator;
denominator = r.denominator;
return *this;
}
Fraction Fraction::operator*(const Fraction& x, const Fraction& y)
{
Fraction z(x.numerator*y.numerator, x.denominator*y.denominator);
return z;
}
コンパイラからのエラー メッセージは次のとおりです。
Fraction& Fraction::operator*(const Fraction&, const Fraction&)' must take either zero or one argument