\r\n\r\n
C言語におけるオーバーライドとオーバーロードの主な違いは、オーバーライドするメソッド呼び出しとその定義の結合が実行時に行われるのに対し、オーバーライドするメソッド呼び出しとその定義の結合はコンパイル時に行われることである。
C言語はマイクロソフト社が開発した汎用プログラミング言語です。C言語の主な利点は、オブジェクト指向プログラミング(OOP)をサポートしていることです。OOPの柱の1つはポリモーフィズムです。これにより、1つのオブジェクトが複数の振る舞いを持つことができる。ポリモーフィズムにはオーバーライドとオーバーローディングと呼ばれる2つの種類があります。この記事では、C言語におけるメソッドのオーバーライドとオーバーロードの違いについて説明します。
1. 概要と主な違い 2. C言語におけるオーバーライドとは #3. C言語におけるオーバーロードとは #4. C言語におけるオーバーライドとオーバーロードの類似点 #5. C言語におけるオーバーライドとオーバーロードの表形式での比較 6. 要約
OOPのもう一つの重要な概念は継承である。すでに存在するクラスのプロパティやメソッドを使用します。コードの再利用性を高めることができます。すでにあるクラスを基底クラス、新しいクラスを派生クラスと呼ぶ。ポリモーフィズムを書き換える場合、ベースクラスと派生クラスがあるはずです。オーバーライドされたメソッド呼び出しと定義の結合は、実行時に行われます。以下にその一例を示す。
図01:書き換え可能なC#プログラム
上記のプログラムによると、クラスShapeは表示メソッドを含む基本クラスです。RectangleクラスとTriangleクラスは派生クラスです。これらの派生クラスも、自身の実装で同じメソッドが表示されます。
まず、シェイプオブジェクトを指す参照変数objが作成されます。そのため、Shapeクラスの表示メソッドが実行されます。そして、参照変数が矩形オブジェクトを指すようになります。したがって、Rectangleクラスのdisplayメソッドが実行されることになります。最後に、参照変数が三角形のオブジェクトを指しています。したがって、Triangleクラスのdisplayメソッドが実行されることになります。ベースクラスのdisplayメソッドは、派生クラスのdisplayメソッドでオーバーライドされます。
Shapeクラスは'virtual'キーワードで記述されています。RectangleとTriangleのクラスは'override'キーワードで書かれています。これらのキーワードを使用しない場合は、すべてShapeクラスの表示メソッドの内容が出力されます。
オーバーロードでは、複数のメソッドが同じ名前を持ち、異なるパラメータを持ちます。パラメータには様々な種類があります。また、メソッドは異なる数のパラメータを持つことができます。メソッドのオーバーロードは同じクラスで発生します。オーバーロードされたメソッドと定義の結合は、コンパイル時に行われます。以下のC言語プログラムをご参照ください。
図02:C言語プログラムのオーバーロード
上のプログラムによると、クラスAには同じ名前の2つのメソッドsum.があり、それらは異なるタイプの引数を持っています。sum (2,3) は整数を用いてsumメソッドを呼び出します。 sum (5.1, 7.94) は倍精度の値を用いてsumメソッドを呼び出します。どちらのメソッドも同じ名前と同じ数の引数を持っています。ただし、パラメータの種類は異なる。必要なメソッドが適宜呼び出されます。また、メソッド名とパラメータ型が同じで、パラメータの数が異なる場合にもオーバーロードが発生することがあります。
C言語におけるリライトとオーバーロードの比較 #. | |
オーバーライドとは、ベースクラスに既に存在するメソッドの特定の実装を、派生クラスのメソッドで提供することです。 | C言語におけるオーバーロードとは、同じ名前のメソッドを異なる実装で複数作成することです。 |
パラメータ | |
C#の書き換えでは、これらのメソッドは、同じ名前、同じパラメータ型、同じ数のパラメータを持ちます。 | C#のオーバーロードでは、同じ名前のメソッドでも、パラメータの数が違ったり、パラメータの種類が違ったりします。 |
発生状況 | |
C#では、基底クラスと派生クラスの両方で書き換えが発生します。 | C言語では、オーバーロードは同じクラスで発生します。 |
バインディングタイム | |
定義に束縛されたメソッドコールのオーバーライドは、実行時に発生する。 | オーバーロードされたメソッド呼び出しとその定義の結合は、コンパイル時に行われます。 |
同義語 | |
書き換えることを実行時ポリモーフィズム、動的ポリモーフィズム、レイトバインディングといいます。 | オーバーロードは、コンパイル時ポリモーフィズム、静的ポリモーフィズム、アーリーバインディングと呼ばれています。 |
オーバーライドとオーバーローディングはポリモーフィズムの2つのタイプです。C言語におけるオーバーライドとオーバーロードの違いは、オーバーライドされたメソッド呼び出しによるその定義の拘束が実行時に発生するのに対し、オーバーロードされたメソッド呼び出しによるその定義の拘束はコンパイル時に発生することである。