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言語