この記事では、オペレーターの取り扱いを容易にする、さらに別のオブジェクト指向の概念について説明します。つまり、Operatorの詳細について説明します。 C ++でのオーバーロード 。この記事では、次のポイントについて説明します。
- C ++でのオーバーロード
- C ++でのオーバーロードの種類
- 演算子のオーバーロードが使用されるのはなぜですか?
- C ++での演算子のオーバーロードの実装
- オーバーロードアプローチの種類
- 単項演算子のオーバーロード
- 二項演算子のオーバーロード
それでは、C ++での演算子のオーバーロードに関するこの記事から始めましょう。
C ++でのオーバーロード
同じ名前でパラメーターの数やタイプが異なる同じクラスのメンバーを2つ以上作成する場合、それはC ++オーバーロードと呼ばれます。
C ++では、次のようにオーバーロードできます。
- メソッド
- コンストラクター
- インデックス付きプロパティ
これは、これらのメンバーがパラメーターのみを持っているためです。
C ++での演算子のオーバーロードに関するこの記事に進みます。
C ++でのオーバーロードの種類
- 関数のオーバーロード
- 演算子のオーバーロード
C ++での演算子のオーバーロードに関するこの記事に進みます。
抽象クラスとインターフェイスの違いは何ですか
演算子のオーバーロードが使用されるのはなぜですか?
C ++プログラムは、演算子のオーバーロードの知識がなくても作成できます。また、プログラマーは、プログラムを直感的にするために、オペレーター操作を深く使用しています。例えば、
次のようにコードを置き換えることができます。
計算= add(divide(a、b)、multiply(a、b))
方程式の場合
計算=(a / b)+(a * b)
演算子のオーバーロードは、C ++のほとんどの演算子の新しい定義を開発するためのシンプルで簡単な方法を提供します。十分な知識があれば、関数と演算子のオーバーロード手法を創造的に使用することで、ほぼ独自の新しい言語を作成できます。以下を除いて、C ++のすべての演算子をオーバーロードできます。
●スコープ演算子(::)
●サイズ演算子(Sizeof)
●メンバーセレクター(。)
●メンバーポインタセレクタ(*)
●三項演算子(?:)
演算子のオーバーロードの構文
初心者のためのAndroidStudioチュートリアル
return_type class_name :: operator op(argument_list){//関数本体}
ここで、戻り値の型は、関数によって返される値の型です。 class_nameはクラスの名前です。
C ++での演算子のオーバーロードに関するこの記事に進みます。
C ++での演算子のオーバーロードの実装
オーバーロードするには、演算子関数は非静的(メンバー関数)またはフレンド関数のいずれかである必要があります。左オペランドがそのクラスのオブジェクトである場合、演算子オーバーロード関数をメンバー関数に適用できますが、左オペランドが異なる場合、演算子オーバーロード関数は非メンバー関数として定義する必要があります。
演算子のオーバーロード関数は、クラスのプライベートメンバーと保護されたメンバーへのアクセスが必要な場合にフレンド関数にすることができます。たとえば、演算子opは演算子関数であり、opはオーバーロードされている演算子であり、演算子はキーワードです。演算子のオーバーロードは、メンバー関数、非メンバー関数、またはフレンド関数のいずれかである関数を実装することによって実現できます。
演算子関数と通常の関数の違いは何ですか?
演算子関数は通常の関数と同じです。唯一の違いは、演算子関数の名前は常に演算子キーワードの後に演算子の記号が続くことであり、対応する演算子が使用されると演算子関数が呼び出されます。
C ++での演算子のオーバーロードに関するこの記事に進みます。
オーバーロードアプローチの種類
演算子のオーバーロードは、3つのアプローチを使用して実行できます。
- 単項演算子のオーバーロード。
- 二項演算子のオーバーロード。
- フレンド関数を使用して二項演算子をオーバーロードしています。
C ++での演算子のオーバーロードに関するこの記事に進みます。
単項演算子のオーバーロード
単項 ‘–‘演算子について考えてみましょう。単項として使用する場合、マイナス演算子は1つのオペランドのみを必要とします。この演算子は、基本データ変数に適用されると、オペランドの符号を変更することがわかっています。この演算子をオーバーロードして、int変数またはfloat変数に適用するのとほぼ同じ方法でオブジェクトに適用できるようにする方法を見てみましょう。単項マイナスは、オブジェクトに適用されると、その各データ項目をデクリメントする必要があります。
例:
#include using namespace std class Height {public://メンバーオブジェクトintフィート、インチ//オブジェクトの値を初期化するコンストラクタHeight(int f、int i){フィート= fインチ= i} //オーバーロード(-)演算子デクリメントを実行する// Heightオブジェクトの操作void演算子-(){フィート-インチ-cout<< 'Feet & Inches after decrement: ' << feet << ' ' ' << inch <出力:
セレンでのクロスブラウザテスト説明:
上記の例では、「–」単項演算子をオーバーロードして、Heightクラスの2つの変数でデクリメントを実行します。 2つのパラメーターをコンストラクターに渡し、それらの値をフィートとインチの変数に保存します。次に、演算子のオーバーロード関数を定義します(void operator-()
)2つの変数が1つの位置だけデクリメントされます。
-h1と書くと、演算子のオーバーロード関数が呼び出され、コンストラクターに渡される値がデクリメントされます。C ++での演算子のオーバーロードに関するこの記事に進みます。
二項演算子のオーバーロード
これは、2つのオペランドを操作する演算子のオーバーロードです。クラスHeightの同じ例を見てみましょうが、今回は2つのHeightオブジェクトh1とh2を追加します。
例:
#include using namespace std class Height {public:int feet、inch Height(){feet = 0 inch = 0} Height(int f、int i){feet = f inch = i} //実行するオーバーロード(+)演算子//バイナリ演算子を使用した2つの距離オブジェクトの追加Heightoperator +(Height&d2)//参照による呼び出し{//高さh3を返すオブジェクトを作成します//フィートとインチの追加を実行しますh3.feet =フィート+ d2.feeth3。 inch = inch + d2.inch //結果のオブジェクトを返すreturnh3}} int main(){Height h1(3、7)Height h2(6、1)Height h3 //オーバーロードされた演算子h3 = h1 + h2coutを使用する<< 'Sum of Feet & Inches: ' << h3.feet << ''' << h3.inch << endl return 0 }出力:
説明:
高さ演算子+(高さ&h2)、ここではreturns_typeの関数はクラスHeightであるため、クラスHeightのオブジェクトh3を返します。行h3 = h1 + h2で、h1はクラスオブジェクトの演算子関数を呼び出し、h2をパラメーターとして受け取ります。次に、h3.feet =フィート+ d2.feetおよびh3.inch =インチ+ d2.inchを適用します。 h3オブジェクトに関連付けられた変数の変数feetとinchの値の合計。
ステートメント「h3 = h1 + h2」が演算子のオーバーロードされた関数を呼び出すと、オブジェクトh1が関数の呼び出しを担当し、h2が関数に渡される引数の役割を果たします。上記の呼び出しステートメントはh3 = h1.operator +(h2)と同等であるため、h2のデータメンバーは直接アクセスされ、h2のデータメンバー(引数として渡される)はドット演算子を使用してアクセスされます。演算子のオーバーロードのルール
- 既存の演算子のみをオーバーロードでき、新しい演算子はオーバーロードできません
- オーバーロードされた演算子には、ユーザー定義データ型のオペランドが少なくとも1つ含まれている必要があります。
- フレンド関数を使用して特定の演算子をオーバーロードすることはありません。ただし、メンバー関数を使用して、これらの演算子をオーバーロードすることができます。
- 単項演算子がメンバー関数を介してオーバーロードされる場合、それらは明示的な引数を取りませんが、フレンド関数によってオーバーロードされる場合、それらは1つの引数を取ります。
- 二項演算子がメンバー関数を介してオーバーロードされる場合、それらは1つの明示的な引数を取り、フレンド関数を介してオーバーロードされる場合、それらは2つの明示的な引数を取ります。
これで、「C ++での演算子のオーバーロード」に関するこの記事は終わりです。詳細については、信頼できるオンライン学習会社であるEdurekaによるJavaトレーニングをご覧ください。エドゥレカの このコースは、HibernateやSpringなどのさまざまなJavaフレームワークとともに、コアJavaの概念と高度なJavaの概念の両方についてトレーニングするように設計されています。
質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。