operator=
関数は、test
というオブジェクトへの参照を返すと仮定すると、何も返しません。そのメソッドことメモリ内インスタンスクラス自体を指しているポインタであるクラスの暗黙this
ポインタにアクセスすることにより(すなわち
test& operator=(const T & new_value)
{
value = new_value;
//dereference the "this" pointer to get a lvalue reference to
//the current object
return *this;
}
注:これに
test& operator=(const T & new_value)
{
value = new_value;
}
:これを変更しますが呼び出されています)、逆参照すると、クラスインスタンスの左辺値参照にアクセスしています。したがって、クラスメソッドから左辺値参照を返す場合、その参照を引数として参照を取る他の関数に渡すことができ、および/または返されたクラスインスタンスに対して他のメソッドを呼び出すことができます。これにより、operator=
が関数とメソッド呼び出しの "チェーン"で使用され、operator=
メソッドが呼び出された後、結果の変更されたオブジェクトインスタンスに対して別のメソッドが呼び出されます。たとえば、あなたが何かを行うことができます:あなたはtest
オブジェクトに対してprint()
メソッドを作成した場合
test<int> a;
a.value = 5;
int b = (a = 6) + 5; //outputs the value 11
を、あなたはまた、次のような何かができる:
test<int> a;
a.value = 7;
(a = 8).print();
このコードは、test
クラスを返します。インスタンスa
をoperator=
メソッドの後に呼び出し、そのインスタンスのprint()
メソッドを呼び出し、値8
を出力します。
Uh ..何かを返しますか? (おそらく '* this') – ildjarn
ありがとう、それは今動作します。私が*これを返すと、実際に何が返ってくるのですか? – 2607
あなたは[良い本](http://stackoverflow.com/q/388242/636019)... – ildjarn