参照型
#include <iostream> using namespace std; class Integer { public: int i; Integer(int n=0) { i = n; } // Integer operator=( Integer obj) {i = obj.i; return *this;} //ok Integer operator=( Integer& obj) {i = obj.i; return *this;} //bad // Integer operator=(const Integer obj) {i = obj.i; return *this;} //ok // Integer operator=(const Integer& obj) {i = obj.i; return *this;} //ok // Integer& operator=( Integer obj) {i = obj.i; return *this;} //ok // Integer& operator=( Integer& obj) {i = obj.i; return *this;} //ok // Integer& operator=(const Integer obj) {i = obj.i; return *this;} //ok // Integer& operator=(const Integer& obj) {i = obj.i; return *this;} //ok }; int main() { Integer i1(1), i2(2), i3(3); cout << i1.i << " " << i2.i << " " << i3.i << endl; i1 = i2 = i3; cout << i1.i << " " << i2.i << " " << i3.i << endl; return 0; }
ネットの説明だと色々あるので、とりあえず考え付くオーバーロードを試してみる
・返す型を参照型にするかどうか
・引数をconst指定するかどうか
・引数を参照型にするかどうか
で、計8通り考え付いたので、実行してみたところ、2つめのオーバーロード方法だけエラーが出る
どうやら、問題はmain関数内の赤字のところで起きるらしい。
参照型の引数でもconst指定をしている4つ目はエラーが出ない。
う~ん、良くわかんなくなってきたぞ