ゼロから始まるC++(オペレータ関数リロード)

1426 ワード

一、オペレータ関数の再ロード
オペレータ関数とは:クラスタイプのオブジェクトに対するC++の演算子です.実際の演算操作はサポートされていないため、コンパイラはそれらを関数に翻訳します.これをオペレータ関数(演算子関数)と呼びます.
コンパイラは演算を演算子関数に翻訳し、カスタムクラスタイプに対して独自の演算機能を設計することができます.
実は各種の演算はすでにいくつかの機能を備えていて、再びそれを実現したのは演算子のリロードと呼ばれています.
  • 両目演算子:a+bメンバー関数a.operator+(b);グローバル関数operator+(a,b);
  • 単項演算子:!aメンバー関数a.operator!(void); グローバル関数operator!(a);

  • 二、両目オペレータ関数の再ロード
    メンバー関数:constクラスoperator#(constクラス&that)const{returnクラス(パラメータ#パラメータ);
    注意:二重ディレクトリ演算子の演算結果は右の値で、戻り値にconstを追加し、constオブジェクトがパラメータを呼び出すためにconstを書く必要があります.関数にもconst属性が必要です.
    グローバル関数:constクラスoperator#(constクラス&a,constクラス&b){
    }注意:グローバル関数は関数ではなく、クラスのプライベートメンバーにアクセスする可能性があります.この問題を解決するには、関数をクラスの友元関数として宣言できます(友元はメンバーではありません).
    友元:クラスの外部の関数でクラスのプライベートメンバー(public/protected/private)にアクセスしたい場合は、存在する関数を友元として宣言する必要がありますが、友元は友人なので、アクセス権のみであり、実際の所有権はありません(根本的にはthisポインタがないためです).
    友元宣言:関数の宣言をクラスに書き、宣言前にfriendキーワードを追加します.友元を使用すると、オペレータ関数をグローバルとして定義したり、クラスのパッケージ性を確保したりできます.
    注意:友元関数とメンバー関数は、同じ役割ドメイン内にないため、リロード関係を構成しません.
    三、付与タイプの両目オペレータ
    1.取得ユニパラメトリックが付与演算に構成された呼び出し方式.String str = “sunll”;//付与演算子str=「hehe」を呼び出さずに、単一パラメータ構造が呼び出されます.
    2、左操作データはconst属性1を持つことができず、メンバー関数は常関数2であることができず、グローバル関数の最初のパラメータはconst属性3を持つことができず、戻り値はすべて(メンバー/グローバル)const属性を備えるべきである.
    四、単一オペレータ関数の再ロード
    メンバーconstクラスoperator#(void){
    	}
    

    グローバルconstクラスoperator#(constクラス&that){
    	}