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