C++_operator= とは何か 01

調べても不明。コピーコンストラクタという単語の意味も調べる必要が ?
operator や T operator=(~ ) というコードが意味不明だった。

    C ( const C & );
    C &operator=( const C & );

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

operator= はメンバ関数の名前に過ぎない。
オブジェクトのコピーを行う際、そのクラス用に定義されている代入演算子
使用することになっている。

 

関数名としてoperator=」という特殊な名称を用いることで、
= 演算子の処理を定義できる。( operator = 、とスペースあってもOK )
代入演算子だけでなく、ほとんどの演算子で可能。( 演算子オーバーロード )

 

代入演算子は、次のように自分で定義することが可能。

    class MyClass
    {
        public:
            MyClass& operator=(const MyClass& rhs);
    };
   
    MyClass& MyClass::operator=(const MyClass& rhs)
    {
        // 代入操作時に行う処理を記述
        return *this;
    }

operator= は、*this を返すように実装。
単に「return this;」だとポインタになってしまうので、
「*this」のように間接参照をおこなう。

戻り値の型が参照になっているので、自身の参照 (*this) を返しておけば、
「a = b = c;」のような連続的な呼び出しが可能になる。( 意味不 )
これは「a.operator=(b.operator=(c));」と同じ。

 

自身と同じクラス型のオブジェクトの代入(コピー)を受け付けるには、
operator= の仮引数は「const 自身のクラス名&」、
戻り値の型は「自身のクラス名&」とする。

operator= の仮引数が、自身のクラスの参照型であることによって、
同じ型のオブジェクトが代入可能になる。

 

operator キーワード

クラスのインスタンスに適用された時の
operator-symbol の意味を指定する関数を宣言する。
これにより、演算子に複数の意味を与える

 

演算子オーバーロード

演算子を拡張する。
演算子オーバーロードは、独自のクラスに対する拡張。( ? )
クラスでメンバ関数として定義する。ここで用いるのが operator キーワード。

 

 

こちらから。
https://programming-place.net/ProgrammingPlacePlus/cpp/language/016.html#assign_op
http://wisdom.sakura.ne.jp/programming/cpp/cpp27.html
https://msdn.microsoft.com/ja-jp/library/5tk49fh2.aspx

 

以上。

--Memo--

//NativeClass
    NativeClass();
    NativeClass(const NativeClass &) = delete;
    NativeClass(& operator=(const NativeClass)) = delete;

青色がコンストラクタ、緑が型。
= delete により、勝手にコピーコンストラクタを作成するのを阻止する。