C++

コピーコンストラクタ

 コンストラクタなので、戻り値はなし。
 引数はconst参照(引数を非constの参照にした場合、コンパイルエラーになった気がする)。

+ example...
class Hoge
{
public:
    Hoge(const Hoge& obj);  // 戻り値なしで引数はconst参照.
};
// コピーコンストラクタ
Hoge::Hoge(const Hoge& obj)
{
    xxxx;
}
 

代入演算子のオーバーロード

 戻り値はvoidでも良いが、void型の場合多重代入が使えなくなる( x = y = z = 0 のような書き方)。多重代入を有効にするため、戻り値は自分自身とする。
 戻り値と引数を値渡し・値返しにすると、デストラクタによるデータ破壊の恐れがあるため、引数と戻り値は参照にする。

+ example...
class Hoge
{
public:
    Hoge& operator=(const Hoge& rhs);  // 引数と戻り値は参照型.
};
// 代入演算子
Hoge& Hoge::operator=(const Hoge& rhs)
{
    xxxx;
    return *this;
}
 

2項演算子のオーバーロード

 基本的には代入演算子の場合と同様、多重演算のために自クラスを戻り値とする。ただし、オペランド自体を変更してしまわないように、メソッド内で一時オブジェクトを作成し、そのオブジェクトを返す。

+ example...
class Hoge
{
public:
    Hoge operator+(const Hoge& rhs);  // 値戻し.
}
// 加算演算子
Hoge Hoge::operator+(const Hoge& rhs)
{
    Hoge result;  // 一時オブジェクトを作成する.
    xxxx;
    return result;
}
 


コメント

最終更新:2011年09月19日 22:28