工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ 演算子のオーバーロードと例

演算子のオーバーロードとは

演算子のオーバーロードの使用 C++ では、1 つのスコープ内の演算子に複数の意味を指定できます。演算子のオーバーロードの目的は、ユーザー定義のデータ型に対して演算子の特別な意味を提供することです。

演算子のオーバーロードを使用すると、C++ 演算子の大部分を再定義できます。演算子のオーバーロードを使用して、1 つの演算子を使用してさまざまな操作を実行することもできます。

この C++ チュートリアルでは、次のことを学びます:

構文

C++ 演算子をオーバーロードするには、次のようにクラス内で特別な関数を定義する必要があります:

class class_name
{
    ... .. ...
    public
       return_type operator symbol (argument(s))
       {
           ... .. ...
       } 
    ... .. ...
};

上記の構文の説明は次のとおりです:

例 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;
}

出力:

コードのスクリーンショットは次のとおりです:

コードの説明:

<オール>
  • 関数を使用するためにコードに iostream ヘッダー ファイルを含めます。
  • プログラムに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • TestClass という名前のクラスを作成します。
  • プライベート アクセス修飾子を使用して、クラス メンバーを非公開でアクセスできるようにマークします。
  • 整数変数 count を作成します。この変数は非公開でアクセスできます。
  • パブリック アクセス修飾子を使用して、クラス メンバーをプライベート アクセス可能としてマークします。
  • クラス コンストラクターを使用して、変数カウンターを 5 に初期化します。
  • — 演算子の意味をオーバーロードします。
  • 演算子は、変数 x の値を 1 減らします。
  • 演算子のオーバーロード セクションの終わり。オペレーターに新しい名前が付けられました。
  • Display() 関数という名前の関数を定義します。
  • Display() 関数が呼び出されたときに、変数 count の値を他のテキストと一緒にコンソールに出力します。 } は、Display() 関数の本体の終わりを示します。
  • クラス本体の終わり。
  • main() 関数を呼び出します。この関数内にプログラム ロジックを追加する必要があります。
  • クラス TestClass のインスタンスを作成し、tc という名前を付けます。
  • これは void 演算子 –() 関数を呼び出します。
  • TestClass クラスのスタンスを使用して、Display() 関数を呼び出します。
  • 関数は、正常終了時に値を返す必要があります。
  • 関数 main() の本体の終わり。
  • C++ での演算子のオーバーロードに対するさまざまなアプローチ

    次のタイプの関数のいずれかを実装することで、演算子のオーバーロードを実行できます:

    <オール>
  • メンバー機能
  • 非会員機能
  • フレンド機能
  • private および protected クラス メンバーにアクセスする必要がある場合は、演算子のオーバーロード関数をフレンド関数にすることができます。

    すべての C++ 演算子をオーバーロードできますか?

    いいえ。オーバーロードできない C++ 演算子があります。

    それらには以下が含まれます:

    注意事項:

    <オール>
  • 演算子のオーバーロードを使用すると、ユーザー定義型 (オブジェクト、構造体) に対してのみ演算子が機能する方法を再定義できます。組み込み型 (float、char、int など) には使用できません。
  • =および &C++ 演算子はデフォルトでオーバーロードされています。たとえば、=演算子を使用して、同じクラスのオブジェクトを直接コピーできます。
  • 演算子の優先順位は、演算子の連想と優先順位を変更しません。ただし、括弧を使用して評価の順序を変更できます。
  • C++ でオーバーロードできない演算子が 4 つあります。これには、スコープ解決演算子 (::)、メンバー選択演算子 (.)、関数へのポインターによるメンバー選択演算子 (.*)、および三項演算子 (?:) が含まれます。
  • 演算子のオーバーロードのルール:

    演算子のオーバーロードのルールは次のとおりです:

    演算子をオーバーロードする方法:

    例 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;
    }
    

    出力:

    コードのスクリーンショットは次のとおりです:

    コードの説明:

    <オール>
  • 関数を使用するためにコードに iostream ヘッダー ファイルを含めます。
  • プログラムに std 名前空間を含めて、呼び出さずにそのクラスを使用します。
  • OperatorOverload という名前のクラスを作成します。
  • プライベート アクセス修飾子を使用して、クラス メンバーを非公開でアクセスできるようにマークします。
  • 整数変数 x を作成します。この変数は非公開でアクセスできます。
  • パブリック アクセス修飾子を使用して、クラス メンバーをプライベート アクセス可能としてマークします。
  • クラス コンストラクターを使用して、変数 x を 10 に初期化します。
  • ++ 演算子の意味をオーバーロードします。
  • 演算子は、変数 x の値を 2 ずつ増やします。
  • 演算子のオーバーロード セクションの終わり。オペレーターに新しい名前が付けられました。
  • Print() 関数の呼び出し。
  • Print() 関数が呼び出されたときに、変数 x の値を他のテキストと一緒にコンソールに出力します。
  • Print() 関数の本文の終わり。
  • クラス本体の終わり。
  • main() 関数を呼び出します。この関数内にプログラム ロジックを追加する必要があります。
  • ov という名前の OperatorOverload クラスのインスタンスを作成します。
  • これは void 演算子 ++() 関数を呼び出します。
  • OperatorOverload クラスのスタンスを使用して、Print() 関数を呼び出します。
  • 関数は、正常終了時に値を返す必要があります。
  • 関数 main() の本体の終わり。
  • 例 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();
    }
    

    出力:

    コードのスクリーンショットは次のとおりです:

    コードの説明:

    <オール>
  • 関数を使用するために、iostream ヘッダー ファイルをプログラムにインクルードします。
  • クラスを呼び出さずに使用できるように、std 名前空間をプログラムに含めます。
  • TestClass という名前のクラスを作成します。 { は、クラス本体の開始を示します。
  • プライベート アクセス修飾子を使用して、変数をプライベートとしてマークします。つまり、変数はクラス内からのみアクセスできます。
  • real と over の 2 つの整数変数を定義します。
  • パブリック アクセス修飾子を使用して、コンストラクタをパブリックとしてマークします。つまり、クラスの外でもアクセスできるようになります。
  • クラス コンストラクターの作成と変数の初期化
  • 変数 real の値を初期化します。
  • 変数 over の値を初期化します。
  • コンストラクタ本体の終了
  • + 演算子の意味をオーバーライドします。
  • TestClass 型のデータ型の結果を作成します。
  • 複素数には + 演算子を使用します。この行は、数値の実部を別の数値の実部に加算します。
  • 複素数には + 演算子を使用します。この行は、数値の虚部を別の数値の虚部に加算します。
  • 実行が成功すると、プログラムは結果変数の値を返します。
  • + 演算子の新しい意味、つまりオーバーロードの定義の終わり
  • print() メソッドを呼び出します。
  • 加算後の新しい複素数をコンソールに出力します。
  • print() 関数の本文の終わり。
  • TestClass クラスの本体の終わり。
  • main() 関数の呼び出し。
  • 追加する実部と複素部の両方の値を渡します。 c1 の最初の部分は c2 の最初の部分、つまり 9+4 に加算されます。 c1 の 2 番目の部分は、c の 2 番目の部分、つまり 5+3 に加算されます。
  • オーバーロードされた + 演算子を使用して演算を実行し、結果を変数 c3 に格納します。
  • 変数 c3 の値をコンソールに出力します。
  • main() 関数の本体の終わり。
  • まとめ:


    C言語

    1. C++ プログラミングで配列を関数に渡す
    2. Python 演算子のオーバーロード
    3. C++ の演算子と例:型とプログラムとは
    4. C++ do…while ループと例
    5. C++ ポインタと例
    6. C++ Char データ型と例
    7. C++ 構造体と例
    8. C++ の std::list と例
    9. C++ 関数とプログラム例
    10. 例を含む Python Lambda 関数
    11. 例を使用した Python round() 関数