代入演算子(コピー演算子)

最終更新日03 Jul 2017 03:00

代入演算子の書き方

String& String::operator=(const String& rhs){//right-hand-side
   if(this==&rhs){//ここでエラーチェック
     return *this;
   }
delete[] data;//古いメモリを削除して
data=new char[strlen(rhs.data)+1];//新しいメモリを割り当てる
strcpy(data,rhs.data);
return *this;
}
  1. 引数は(いつものように)constリファレンス渡しにする。
  2. 戻り値はオブジェクトのリファレンスにする1
  3. 戻り値にconstをつけない2
  4. return するのは*thisにすること3
  5. + 正しいコ代入演算子の書き方
  • 戻り値はconstをつけない。
  • 戻り値は値渡しにする。
  • 引数はconst参照渡し
 CVertex& CVertex::operator=(const CVertex &_in) {
        x=_in.x;y=_in.y;z=_in.z;w=_in.w;
       return *this;
    }

自分自身を返す。

駄目な例

CMiffy& operator=(const CMiffy& _in){
 return CMiffy(_in.x,_in.y);
};

メンバーが0に初期化されてしまったりする

エラー例

no match for 'operator=' in なになに=Class::operator*(float)(parameter) candidates are Class Class::operator(Class&)

関数の引数にconstをつけてないとこのエラーがある。

constなメンバが存在する場合、どうやってコピーすればいいんだ???

constなメンバ関数にしてはいけないのだっけ??

color<T>& operator=(const color<T>& _in)const{//constなメンバ関数
            r=_in.r;
            g=_in.g;
            b=_in.b;
            a=_in.a;
            return *this;
        }

にすると、
エラー 153 error C2440: 'return' : 'const miffy::color<T>' から 'miffy::color<T> &' に変換できません。
になる。

constructor copy-constractor return


ファイル

サポートサイト Wikidot.com constructorcopy-constractorreturn