C ++での関数のオーバーロード:知っておくべきことすべて



この記事では、C ++での関数のオーバーロードに関する詳細で包括的な知識と、理解すべき多数の例を提供します。

C ++は、非常に柔軟なプログラミング言語の1つであり、オブジェクト指向プログラミングのいくつかの機能もカバーしています。オーバーロードは、このプログラミング言語のもう1つの機能です。以下のポインタは、この「C ++での関数のオーバーロード」の記事でカバーされます-

C ++のオーバーロード

同じ名前でパラメーターの数やタイプが異なるクラスのメンバーを2つ以上作成する場合、それはC ++オーバーロードと呼ばれます。 C ++では、次のようにオーバーロードできます。





  • メソッド、
  • コンストラクター、および
  • インデックス付きプロパティ

C ++でのオーバーロードの種類

types-of-overloading-in-c++

C ++での関数のオーバーロードとは何ですか?

C ++での関数のオーバーロードは、同じ名前でパラメーターが異なるクラスの2つ以上のメンバー関数を持つプロセスとして定義できます。関数のオーバーロードでは、要件に応じて、さまざまなタイプの引数またはさまざまな数の引数を使用して、関数を再定義できます。コンパイラが2つのオーバーロードされた関数を区別できるのは、これらの違いによってのみです。



関数のオーバーロードの主な利点の1つは、同じアクションに異なる名前を何度も使用する必要がないため、プログラムの可読性が向上することです。

引数の数を変更することによって

この関数のオーバーロードの方法では、同じ名前で同じタイプのパラメーターの数が異なる2つの関数を定義します。たとえば、以下のプログラムでは、2つの整数と3つの整数の合計を返す2つのadd()関数を作成しました。

//最初の関数定義intadd(int a、int b){cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

ここで、add()関数は2つの定義を持っているため、オーバーロードされていると言われます。1つは2つの引数を受け入れ、もう1つは3つの引数を受け入れます。どのadd()関数が呼び出されるかは、引数の数によって異なります。



int main(){add(10、20)// 2つのパラメーターを持つadd()はadd(10、20、30)と呼ばれます// 3つのパラメーターを持つsum()は}と呼ばれます
#include using namespace std int add(int a、int b){cout<< a+b <

上記の例では、引数の数を変更してadd()関数をオーバーロードします。最初に、2つのパラメーターを使用してadd()関数を定義し、次にadd()関数を再度定義してオーバーロードしますが、今回は3つのパラメーターを使用します。

さまざまな種類の引数を持つことによって

この方法では、同じ名前と同じ数のパラメーターを持つ2つ以上の関数を定義しますが、これらのパラメーターに使用されるデータ型は異なります。たとえば、このプログラムには3つのadd()関数があり、最初の関数は2つの整数引数を取得し、2番目の関数は2つのfloat引数を取得し、3番目の関数は2つのdouble引数を取得します。

#include using namespace std int add(int x、int y)//最初の定義{cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

Javaでオブジェクトのクローンを作成する方法

上記の例では、add()関数を3回定義しています。最初に整数をパラメーターとして使用し、2番目にfloatをパラメーターとして使用し、3番目にdoubleをパラメーターとして使用します。
したがって、add()関数を2回オーバーライドします。

C ++での関数のオーバーロードの利点

  • 関数のオーバーロードを使用して、プログラムのメモリスペース、一貫性、および可読性を節約します。

  • 使用関数のオーバーロードの概念により、同じ名前の複数の関数を開発できます

  • 関数のオーバーロードは、関数の同じ名前を使用するリンクがいくつかある場合でも、異なる動作を取得できるようにするポリモーフィズムの動作を示しています。

  • 関数のオーバーロードは、プログラムの実行を高速化します。

  • 関数のオーバーロードは、コードの再利用性とメモリの節約に使用されます。

  • これは、アプリケーションがパラメータのタイプに基づいてクラスメソッドをロードするのに役立ちます。

    hadoop管理者とhadoop開発者
  • コードのメンテナンスは簡単です。

C ++での関数のオーバーロードのデメリット

  • 戻り値の型のみが異なる関数宣言は、関数のオーバーロードプロセスでオーバーロードすることはできません。
  • 同じパラメーターまたは同じ名前タイプのメンバー関数宣言は、それらのいずれかが静的メンバー関数として宣言されている場合、オーバーロードできません。
  • クラスXYZ {static void func()void func()//エラー}

関数のオーバーロードとあいまいさ

コンパイラがオーバーロードされた関数の中で最初に呼び出す関数を決定できない場合、この状況は関数のオーバーロードのあいまいさとして知られています。あいまいさエラーが表示された場合、コンパイラはプログラムを実行しません。関数のオーバーロードのあいまいさの原因:

  • 型変換。
  • デフォルトの引数を持つ関数。
  • 参照パスのある関数

型変換:

#include using namespace std void function(float)void function(int)void function(float x){std :: cout<< 'Value of x is : ' <

上記の例では、「オーバーロードされた「function(double)」の呼び出しがあいまいです」というエラーがスローされます。関数(3.4)は最初の関数を呼び出します。関数(34)は、予測に従って2番目の関数を呼び出します。しかし、C ++ではすべての浮動小数点定数が浮動小数点ではなくdoubleとして扱われるため、これは起こりません。 float変数をdouble変数に置き換えると、プログラムは正常に機能します。したがって、これをfloatからdoubleへの型変換エラーと呼びます。

デフォルトの引数を持つ関数:

#include using namespace std void function(int)void function(int、int)void function(int x){std :: cout<< 'Value of x is : ' <

上記の例では、「オーバーロードされた「fun(int)」の呼び出しがあいまいです」というエラーが表示されます。これは、function(int y、int z = 12)を2つの方法で呼び出すことができるためです。

  1. 1つの引数で関数を呼び出す(そして自動的にz = 12の値を取ります)
  2. 2つの引数を使用して関数を呼び出す。

function:function(12)を呼び出すと、function(int)とfunction(int、int)の両方の条件が完全に満たされるため、コンパイラーがあいまいになり、エラーが表示されます。

参照渡しの関数

#include using namespace std void function(int)void function(int&)void function(int a){std :: cout<< 'Value of a is : ' < 

上記のプログラムは、「オーバーロードされた「fun(int&)」の呼び出しがあいまいです」というエラーを出します。ご覧のとおり、最初の関数は1つの整数引数を取り、2番目の関数は引数として参照パラメーターを取ります。この場合、fun(int)とfun(int&)の間に構文上の違いがないため、コンパイラーはユーザーが必要とする関数を理解できず、あいまいさのエラーが発生します。

これで、C ++でのこの関数のオーバーロードは終了します。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。