2016-05-01 10 views
-1

非会員関数を使用して演算子をオーバーロードすると、最初のパラメータは左のオペランドに対応し、2番目のパラメータは右のオペランドに対応しますか?私はこのようにそれを使用するには、「< <」演算子オーバーロードしようとしていた演算子のオーバーロード:第1パラメータは左のオペランドに対応し、第2の1つは右のオペランドに対応しますか?

:以下

stream << ClassA << ClassB 

FeetInchesは、メンバ変数feetinchesを持つクラスである例です。

が、このパラメータの順序が動作しない -

ostream &operator<<(ostream &strm, const FeetInches &obj) 
{ 
    strm << obj.feet << " feet, " << obj.inches << " inches"; 
    return strm; 
} 

は、このパラメータの順序が動作する理由ということですか?

ostream &operator<<(const FeetInches &obj, ostream &strm) 
{ 
    strm << obj.feet << " feet, " << obj.inches << " inches"; 
    return strm; 
} 

答えて

2

ostreamここではオブジェクトを呼び出すことはありません。 cout<<obj<<endl;として

ostream &operator<<(ostream &strm, const FeetInches &obj) 
{ 
    strm << obj.feet << " feet, " << obj.inches << " inches"; 
    return strm; 
} 

operator<<(cout,obj);として解釈されるであろう。

3

はい、すべてあなたの言ったとおりに動作します。

関連する問題