2008年1月20日日曜日

代入演算子

をオーバーロードした場合、戻り値は参照にすべき。

そうしないと、以下のコードの(1),(2)のような式が成り立たなくなってしまう。

class Value {
private:
   
int value;
public:
 
Value(int value = 0) {
 
this->value = value;
 
}
   
int get() {
       
return value;
   
}
   
Value& operator=(Value& value) {
       
this->value = value.value;
       
return *this;
   
}
   
Value& operator+=(int value) {
       
this->value += value;
       
return *this;
   
}
};

int main(int argc, char** argv) {
 
Value a = 1;
 
Value b = 2;
 
Value c = 3;
 
Value d = 4;

 c
= b = a; // (1)
 printf
("c=%d,b=%d,a=%d\n", c.get(), b.get(), a.get());
 
(a = d) += 1; // (2)
 printf
("a=%d,d=%d\n", a.get(), d.get());
 
 
return 0;
}

0 件のコメント: