C ++での関数のオーバーロードとオブジェクト指向の間に関係はありますか?
もしそうなら、その関係は何ですか?
ほとんどのオブジェクト指向システムの機能の1つはある種のポリモーフィズムであり、オーバーロードはある種のポリモーフィズム(具体的にはアドホック多相性)も提供するという意味で、これらは関連しています。
C ++は、主に3つの方法でポリモーフィズムを提供します。
そして、これらの機能のそれぞれが、それらを関連させるある種のポリモーフィズムを提供するという事実です。
これらは別個の概念です。
オーバーロードとは、前述のように、タイプを使用して関数を決定することです。
オブジェクト指向プログラミングは、モデル化されたものの概念によるデータと機能の論理的な編成です。多くの場合、現実世界のものまたはその抽象化です。
同様の問題を解決しようとする言語は、多くの場合、両方の機能を提供しますが、一方は一方のツールを自由に使用でき、もう一方は害を及ぼすことなく使用できます。
関数のオーバーロードは、オブジェクト指向の最も深いアイデアの1つに関連しています。つまり、データ型が関数または演算子の動作を決定するというアイデアです。
関連するアイデアは、演算子のオーバーロードのアイデアです。演算子(+や-など)はさまざまなデータ型に適用でき、演算子は関連する型に対して正しいことを行います。
独自の型の演算子関数を作成することもできます。
コア言語で演算子のオーバーロードを確認できます。2つの整数を加算し、2つの浮動小数点数を加算するには、異なるマシン命令が必要です。
C ++コンパイラは、式のタイプに応じて、さまざまな低レベルルーチンを実行します。
a + b
引数のタイプが変更されると、コンパイラーは異なる命令を生成します。
繰り返しになりますが、このアイデアはオブジェクト指向に深く根付いたものです。関連するデータのタイプによって、関数の動作が決まります。
しかし、オーバーロードはこのアイデアの完全な実装ではありません。タイプ情報は、コンパイル時に不完全に認識される場合があります。そこで、ポリモーフィズムが登場します。