2012-03-25 7 views
0

演算子,をオーバーロードして、この構文を使用して小数部を割り当てることができます: frac = 1, 2()オペレータなしで正常に動作しました。カッコのデフォルト動作を上書きする方法はありますか?

#include <iostream> 

using namespace std; 

class fraction { 
private: 
    int m_num; 
    int m_den; 

public: 
    fraction(int num, int den) 
     :m_num(num), m_den(den) { 

    } 

    fraction& operator =(int num) { 
     m_num = num; 
     return *this; 
    } 

    fraction& operator ,(int den) { 
     m_den = den; 
     return *this; 
    } 

public: 
    friend 
     ostream& operator <<(ostream& out, const fraction& rhs) { 
     return out << rhs.m_num << ", " << rhs.m_den; 
    } 
}; 

int main() { 
    fraction f(1, 2); 
    cout << "original f = " << f << endl; 

    f = 4, 5; 
    cout << "expected = " << f << endl; 

    f = (10, 11); 
    cout << "unexpected = " << f << endl; 
} 

** OUTPUT

$ prog.exe 
original f = 1, 2 
expected = 4, 5 
unexpected = 11, 5 

私が誤ってnumden周り()を入れて、出力から、私はoperator()の優先順位は、実際の結果に影響を与え実現。それは奇数であるoperator ,だけを使用して評価しました。だから私の質問は、この特定の状況でオペレータ()の影響を無視する方法(マクロかもしれません?)ですか?

+0

なし '演算子()'ここではありません。 –

+0

いいえ、デフォルトの 'operator 'を使用して' operator = 'のみを評価しました。かっこを使用すると、それが起こります。そして、あなたが望むものをする方法はありません(もし存在するなら、あなたはしてはいけません)。 –

+3

mg。私はオペレータが虐待を過負荷にした事例を見て以来、長い時間が経ちました。 – usr

答えて

2

少なくとも1つの引数がユーザ定義の場合にのみ演算子をオーバーロードできます。あなたのケースでは、あなたの議論はどちらもintであるので、何もできません。

operator,の疑わしい使用を避けること以外!)

関連する問題