参照型 | spin on the RITZ

参照型

#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つ目はエラーが出ない。


う~ん、良くわかんなくなってきたぞ