2017-06-01 16 views
2
#include<iostream> 
using namespace std; 

class test 
{ 
    int i; 
    string s; 

    public: 
    test(){} 

    test(int a,string b) 
    { 
     i=a; 
     s=b; 
    } 

    void operator = (test &temp) 
    { 
     cout<<"In assignment operator"<<endl; 
     i=temp.i; 
     s=temp.s; 
    } 

    test operator + (test &temp) 
    { 
     test newobj; 
     newobj.i=i+temp.i; 
     newobj.s=s+" "+temp.s; 
     return newobj; 
    } 
}; 

main() 
{ 
    test t1(5,"ABC"); 
    test t2; 
    t2=t1; 
    test t3; 
    t3=t1+t2; 
} 

質問:t3=t1+t2は私にエラーが発生します。私は=と+演算子の両方をオーバーロードし、上記のように使用したいと思います。どこが間違っていますか?私は明示的に1つの代入演算子のオーバーロードを定義したいと思います。代入とプラス演算子のオーバーロード代入

エラー:型の右辺値からタイプ '試験&' の非const参照の無効な初期化 'test' t3=t1+t2;

'void test::operator=(test&)' void operator = (test &temp)

+0

両オペレータはCONSTテスト& ''としての引数を取るべきです。 –

+0

paramsは 'const temp 'である必要があります。 't1 + t2'は一時的になり、非constを通ることができないからです。 –

+0

誰かがconstでのパラメータの使用を説明できるかどうか本当に感謝します。私が理解する限り、constは受け取ったオブジェクトのデータメンバーを変更できないことを示しています。私は間違っているかもしれません。助けてください。 –

答えて

1

t1+t2の引数1を初期化しますtestを返します。非const(つまりtest &)への参照にバインドすることはできません。そのため、t3=t1+t2;失敗する。一方、一時的なものはconst(すなわちconst test&)への参照にバインドすることができます。したがって、パラメータタイプをconst test&に変更することができます。

void operator = (const test &temp) 
{ 
    cout<<"In assignment operator"<<endl; 
    i=temp.i; 
    s=temp.s; 
} 

BTW1:operator+で同じことを行う方が良いです。

BTW2は:operator=従来の署名(および実装)は:

test& operator= (const test& temp) 
{ 
    cout<<"In assignment operator"<<endl; 
    i = temp.i; 
    s = temp.s; 
    return *this; 
} 
+0

ありがとうございます。しかしconstに関するあなたの説明を理解していませんでした。テストオブジェクトをconstとして受け取ることで、上記のコードはどのようにうまく機能しますか?代入演算子のオーバーロード関数では、2番目のオブジェクトの値を現在のオブジェクトに代入するときに、なぜ現在のオブジェクトを返す必要がありますか? t2 = t1、ここではt2オブジェクトは=演算子を呼び出し、t1オブジェクトの参照を受け取ります。次に、t1〜t2の値を代入するだけです。なぜこれを返す必要がありますか? (つまり、オブジェクトt2への参照) –

+0

@DigeshPatel一時変数は 'test&'にバインドすることはできないので、 'const test&'にバインドすることができません。例えば'test&t = test {};'は失敗しますが、 'const test&t = test {};'は正常です。 – songyuanyao

+0

@DigeshPatel 2番目の質問のために、組込み型のような演算子を連鎖させることができます。例えば't1 = t2 = t3;'。 – songyuanyao

関連する問題