ページ 11

constと参照について

Posted: 2011年3月30日(水) 15:09
by dom
オプジェクトをコピーしたくなかったので,以下のように参照渡し,参照戻しで演算子のオーバーロードをしようとしたのですが
「'const MyClass' から 'MyClass &' へ 'this' ポインタを変換できません。」とコンパイルエラーが出ます.

コード:

MyClass& func(const MyClass& obj)
{
    (省略)  
    obj.func();    ←エラー
    (省略)  
    return obj;
}
objを変更しているわけではないと思うのでなぜエラーになるのかよくわかりません.
このエラーはどういう意味なのでしょうか?

Re: constと参照について

Posted: 2011年3月30日(水) 15:13
by dom

コード:

MyClass& operator =(const MyClass& obj)
{
    (省略)  
    obj.func();    ←エラー
    (省略)  
    return obj;
}
でした.

Re: constと参照について

Posted: 2011年3月30日(水) 15:16
by YuO
const Tの参照なので,オブジェクト自体が変化しない,ということになります。
# const T &はconst T * constに近いイメージ。

const T型のオブジェクトのメンバ関数を呼び出すので,そのメンバ関数はconstメンバ関数である必要があります。

コード:

class MyClass
{
public:
    void func () const { /* ... */ }
};
のように。

さらに,戻り値の型もconst修飾が外れているので,
  • 引数の型をMyClass &にする
  • 戻り値をobj以外にする。operator =であれば,*thisを返すのが普通。
とする必要があります。