C++ 演算子のオーバーロードと例
演算子のオーバーロードとは
演算子のオーバーロードの使用 C++ では、1 つのスコープ内の演算子に複数の意味を指定できます。演算子のオーバーロードの目的は、ユーザー定義のデータ型に対して演算子の特別な意味を提供することです。
演算子のオーバーロードを使用すると、C++ 演算子の大部分を再定義できます。演算子のオーバーロードを使用して、1 つの演算子を使用してさまざまな操作を実行することもできます。
この C++ チュートリアルでは、次のことを学びます:
- 演算子のオーバーロードとは?
- 構文
- C++ での演算子のオーバーロードに対するさまざまなアプローチ
- すべての C++ 演算子をオーバーロードできますか?
- 注意事項:
- 演算子のオーバーロードのルール:
- 演算子をオーバーロードする方法:
構文
C++ 演算子をオーバーロードするには、次のようにクラス内で特別な関数を定義する必要があります:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
上記の構文の説明は次のとおりです:
- return_type は、関数の戻り値の型です。
- 次に、operator キーワードについて言及します。
- 記号は、オーバーロードされる演算子記号を示します。たとえば、+、-、<、++。
- 引数は、関数と同じ方法で演算子関数に渡すことができます。
例 1:
#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; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>C++ での演算子のオーバーロードに対するさまざまなアプローチ
次のタイプの関数のいずれかを実装することで、演算子のオーバーロードを実行できます:
<オール>- 左オペランドがクラスのオブジェクトである場合、演算子オーバーロード関数はメンバー関数である可能性があります。
- 左オペランドが異なる場合、演算子オーバーロード関数は非メンバー関数である必要があります。
private および protected クラス メンバーにアクセスする必要がある場合は、演算子のオーバーロード関数をフレンド関数にすることができます。
すべての C++ 演算子をオーバーロードできますか?
いいえ。オーバーロードできない C++ 演算子があります。
それらには以下が含まれます:
- ::-スコープ解決演算子
- ?:-三項演算子。 <リ>. -メンバーセレクター
- 演算子のサイズ
- * -メンバー ポインター セレクター
注意事項:
<オール>演算子のオーバーロードのルール:
演算子のオーバーロードのルールは次のとおりです:
- それが機能するには、少なくとも 1 つのオペランドがユーザー定義のクラス オブジェクトでなければなりません。
- 既存の演算子のみをオーバーロードできます。新しい演算子をオーバーロードすることはできません。
- 一部の演算子は、フレンド関数を使用してオーバーロードできません。ただし、そのような演算子はメンバー関数を使用してオーバーロードできます。
演算子をオーバーロードする方法:
例 1:
#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; }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>例 2:
#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(); }
出力:
コードのスクリーンショットは次のとおりです:
コードの説明:
<オール>まとめ:
- 1 つのスコープで C++ 演算子に複数の意味を指定できます。
- これは、演算子のオーバーロードと呼ばれます。
- 演算子のオーバーロードは、ユーザー定義のデータ型に対する演算子の特別な意味を提供します。
- C++ 演算子の大部分は、演算子のオーバーロードによって再定義できます。
- すべての C++ 演算子をオーバーロードできるわけではありません。
- 演算子をオーバーロードするには、オペランドの少なくとも 1 つがユーザー定義オブジェクトでなければなりません。
- オーバーロードできるのは既存の演算子のみです。新しい演算子をオーバーロードすることはできません。
C言語