C++ Opera例による tor のオーバーロード
何ですか Opera過負荷ですか?
使い方 オペレーターのオーバーロード in C++、1 つのスコープ内で演算子に複数の意味を指定できます。演算子のオーバーロードの目的は、ユーザー定義のデータ型に対して演算子の特別な意味を提供することです。
演算子オーバーロードの助けを借りて、ほとんどの C++ 演算子。演算子のオーバーロードを使用して、1 つの演算子で異なる操作を実行することもできます。
構文
過負荷をかけるには C++ 演算子を使用する場合は、次のようにクラス内に特別な関数を定義する必要があります。
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
上記の構文の説明は次のとおりです。
- return_type は関数の戻り値の型です。
- 次に、operator キーワードについて説明します。
- シンボルは、オーバーロードされる演算子シンボルを表します。たとえば、+、-、<、++ などです。
- 引数は関数と同じ方法で演算子関数に渡すことができます。
例
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
出力:
コードのスクリーンショットは次のとおりです。
コードの説明:
- iostream ヘッダー ファイルをコードに含めて、その機能を使用します。
- プログラムに std 名前空間を含めると、そのクラスを呼び出さずに使用できます。
- TestClass という名前のクラスを作成します。
- private アクセス修飾子を使用して、クラス メンバーをプライベートにアクセスできるものとしてマークします。
- 整数変数 count を作成します。 この変数はプライベートにアクセス可能になります。
- public アクセス修飾子を使用して、クラス メンバーをプライベートにアクセスできるものとしてマークします。
- クラス コンストラクターを使用して、変数 counter を 5 に初期化します。
- — 演算子の意味をオーバーロードします。
- 演算子は変数 x の値を 1 減らします。
- 演算子オーバーロード セクションの終了。演算子に新しい名前が付けられました。
- Display() 関数という名前の関数を定義します。
- Display() 関数が呼び出されたときに、変数 count の値を他のテキストとともにコンソールに出力します。 } は、Display() 関数の本体の終わりを示します。
- クラス本体の終了。
- main() 関数を呼び出します。 プログラム ロジックはこの関数内に追加する必要があります。
- クラス TestClass のインスタンスを作成し、それに tc という名前を付けます。
- これにより、void 演算子 –() 関数が呼び出されます。
- TestClass クラスのスタンスを使用して、Display() 関数を呼び出します。
- 関数は正常に完了すると値を返す必要があります。
- 関数 main() の本体の終わり。
さまざまなアプローチ Operatorオーバーロード C++
次のいずれかのタイプの関数を実装することにより、演算子のオーバーロードを実行できます。
- メンバー関数
- 非会員機能
- フレンド機能
- 左オペランドがクラスのオブジェクトである場合、演算子オーバーロード関数はメンバー関数になることがあります。
- 左オペランドが異なる場合、 Operator オーバーロード関数は非メンバー関数である必要があります。
プライベートおよび保護されたクラス メンバーにアクセスする必要がある場合は、演算子オーバーロード関数をフレンド関数にすることができます。
全部できる C++ Opera過負荷になっていませんか?
いいえ。 C++ オーバーロードできない演算子。
彼らを含める:
- :: -スコープ解決演算子
- ?: 三項演算子。
- 。 -メンバーセレクター
- Sizeof演算子
- * -メンバー ポインター セレクター
覚えておいてください観光
- 演算子のオーバーロードを使用すると、ユーザー定義型 (オブジェクト、構造体) に対してのみ演算子の動作方法を再定義できます。組み込み型 (float、char、int など) には使用できません。
- = と & C++ 演算子はデフォルトでオーバーロードされます。たとえば、= 演算子を使用して同じクラスのオブジェクトを直接コピーできます。
- Opera演算子の優先順位は、結合性や演算子の優先順位を変更しません。ただし、括弧を使用して評価の順序を変更することはできます。
- オーバーロードできない演算子が4つあります。 C++これらには、スコープ解決演算子 (::)、メンバー選択演算子 (.)、関数へのポインターによるメンバー選択演算子 (.*)、および三項演算子 (?:) が含まれます。
のルール Operaトールのオーバーロード
以下のルールがあります Opera過負荷:
- 動作させるには、少なくとも 1 つのオペランドがユーザー定義のクラス オブジェクトである必要があります。
- オーバーロードできるのは既存の演算子のみです。新しい演算子をオーバーロードすることはできません。
- 一部の演算子はフレンド関数を使用してオーバーロードできません。ただし、そのような演算子はメンバー関数を使用してオーバーロードできます。
オーバーロードする方法 Operaタ
例
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x = x + 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
出力:
コードのスクリーンショットは次のとおりです。
コードの説明:
- iostream ヘッダー ファイルをコードに含めて、その機能を使用します。
- プログラムに std 名前空間を含めると、そのクラスを呼び出さずに使用できます。
- という名前のクラスを作成します Operatorオーバーロード。
- private アクセス修飾子を使用して、クラス メンバーをプライベートにアクセスできるものとしてマークします。
- 整数変数 x を作成します。 この変数はプライベートにアクセス可能になります。
- public アクセス修飾子を使用して、クラス メンバーをプライベートにアクセスできるものとしてマークします。
- クラス コンストラクターを使用して、変数 x を 10 に初期化します。
- ++ 演算子の意味をオーバーロードします。
- 演算子は変数 x の値を 2 増加します。
- 演算子オーバーロード セクションの終了。演算子に新しい名前が付けられました。
- Print() 関数を呼び出します。
- Print() 関数が呼び出されたときに、変数 x の値を他のテキストと一緒にコンソールに出力します。
- Print() 関数の本体の終わり。
- クラス本体の終了。
- main() 関数を呼び出します。 プログラム ロジックはこの関数内に追加する必要があります。
- のインスタンスを作成します OperatorOverload ov という名前のクラス。
- これにより、void 演算子 ++() 関数が呼び出されます。
- のスタンスを使用します。 OperatorOverload クラスを使用して Print() 関数を呼び出します。
- 関数は正常に完了すると値を返す必要があります。
- 関数 main() の本体の終わり。
例
#include<iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) { real = rl; over = ov; } TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
出力:
コードのスクリーンショットは次のとおりです。
コードの説明:
- iostream ヘッダー ファイルをプログラムに組み込み、その機能を使用します。
- std 名前空間を呼び出さずにそのクラスを使用するには、プログラムに std 名前空間を組み込みます。
- TestClass という名前のクラスを作成します。 { はクラス本体の始まりを示します。
- private アクセス修飾子を使用して、変数をプライベートとしてマークします。これは、変数がクラス内からのみアクセスできることを意味します。
- 実数とそれ以上の XNUMX つの整数変数を定義します。
- public アクセス修飾子を使用してコンストラクターを public としてマークします。これは、クラスの外からもアクセスできることを意味します。
- クラスコンストラクターの作成と初期化 variables.
- 変数realの値を初期化します。
- 変数の値を初期化します。
- コンストラクター本体の終わり。
- + 演算子の意味を上書きします。
- TestClass タイプのデータ型結果を作成します。
- 複素数には + 演算子を使用します。この行は、ある数値の実部を別の数値の実部に追加します。
- 複素数には + 演算子を使用します。この行は、ある数値の虚数部を別の数値の虚数部に追加します。
- プログラムは、実行が成功すると変数 result の値を返します。
- + 演算子の新しい意味、つまりオーバーロードの定義はこれで終わりです。
- print() メソッドを呼び出します。
- 加算後の新しい複素数をコンソールに出力します。
- print()関数の本体の終わり。
- TestClass クラスの本体の終わり。
- main() 関数を呼び出します。
- 加算する実数部と複素数部の両方の値を渡します。c1 の最初の部分は c2 の最初の部分、つまり 9+4 に加算されます。c1 の 5 番目の部分は c の 3 番目の部分、つまり XNUMX+XNUMX に加算されます。
- オーバーロードされた + 演算子を使用して演算を実行し、結果を変数 c3 に格納します。
- 変数 c3 の値をコンソールに出力します。
- main() 関数の本体の終わり。
まとめ
- 複数の意味を指定できます。 C++ オペレータ XNUMX つのスコープ内で。
- これを演算子オーバーロードと呼びます。
- Operator オーバーロードは、ユーザー定義のデータ型に対して演算子の特別な意味を提供します。
- 大部分の C++ 演算子のオーバーロードによる演算子。
- すべてではない C++ 演算子はオーバーロードできます。
- 演算子をオーバーロードするには、少なくとも 1 つのオペランドがユーザー定義オブジェクトである必要があります。
- オーバーロードできるのは既存の演算子のみです。新しい演算子をオーバーロードすることはできません。