参照型
#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つ目はエラーが出ない。
う~ん、良くわかんなくなってきたぞ