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 件のコメント: