C はオブジェクト指向プログラミングをサポートする言語であり、オブジェクト指向プログラミングの大きな特徴はポリモーフィズムです。ポリモーフィズムとは、同じ操作を実行するときに異なるオブジェクトによって生成される異なる動作を指します。 C では、関数のオーバーロードと仮想関数の使用によってポリモーフィズムが実現されます。以下では、読者がこの概念をよりよく理解できるように、C のポリモーフィズムについて説明します。
1. 関数のオーバーロード
関数のオーバーロードとは、同じスコープ内に同じ名前の複数の関数が定義されていますが、それらのパラメーターの型、パラメーターの数、または戻り値の型が異なることを意味します。このようにして、関数が呼び出されるとき、コンパイラは渡されたパラメータに基づいて、対応する関数を呼び出すことを自動的に選択します。例:
void print(int a){ cout<<"int: "<<a<<endl; } void print(double b){ cout<<"double: "<<b<<endl; } int main(){ print(10); //调用print(int a)函数 print(3.14); //调用print(double b)函数 return 0; }
関数 print はオーバーロードされ、int 型パラメーターと double 型パラメーターに対してそれぞれ定義されています。 main 関数で print 関数が呼び出されるとき、コンパイラは渡されたパラメータのタイプに基づいて、呼び出す対応する関数を選択します。これは、関数のオーバーロードによって実現されるポリモーフィズムの例です。
2. 仮想関数
仮想関数は、親クラスで定義された関数であり、サブクラスによってオーバーライドできます。関数を基本クラスの仮想型として定義します。サブクラスが関数を継承する場合は、関数も仮想関数として定義する必要があります。関数名とパラメーターはまったく同じである必要があります。実行時には、仮想関数は実際に実行されているオブジェクト タイプに従って動的にバインドされ、ポリモーフィズムを実現します。例:
class Shape{ public: virtual void area(){ //定义虚函数area cout<<"This is a shape"<<endl; } }; class Circle:public Shape{ public: void area(){//重写虚函数area cout<<"This is a circle"<<endl; } }; class Rectangle:public Shape{ public: void area(){//重写虚函数area cout<<"This is a rectangle"<<endl; } }; int main(){ Shape *shape; Circle circle; Rectangle rectangle; shape = &circle; shape->area();//调用circle类中的虚函数area shape = &rectangle; shape->area();//调用rectangle类中的虚函数area return 0; }
上記のコードでは、仮想関数領域を含む Shape クラスが定義されています。 Circle クラスと Rectangle クラスは Shape クラスを継承し、その中の仮想関数領域を書き換えます。 main 関数では、Shape 型へのポインタを定義し、Circle オブジェクトと Rectangle オブジェクトのアドレスに割り当て、それぞれ area 関数を呼び出します。 area 関数は仮想関数であり、実際に実行されているオブジェクトの種類に応じて動的にバインドされるため、出力結果はそれぞれ「これは円です」と「これは長方形です」となります。これは、ポリモーフィズムを実装した仮想関数の例です。
3. 純粋仮想関数
純粋仮想関数とは、仮想関数の関数本体が空であり、サブクラスがクラスを継承するように関数を書き直す必要があることを意味します。基本クラスに純粋仮想関数がある場合、そのクラスは抽象クラスと呼ばれます。例:
class Shape{ public: virtual void area() = 0;//定义纯虚函数area }; class Circle:public Shape{ public: void area(){ cout<<"This is a circle"<<endl; } }; class Rectangle:public Shape{ public: void area(){ cout<<"This is a rectangle"<<endl; } }; int main(){ Shape *shape; Circle circle; Rectangle rectangle; shape = &circle; shape->area();//调用circle类中的虚函数area shape = &rectangle; shape->area();//调用rectangle类中的虚函数area return 0; }
上記のコードでは、純粋仮想関数領域は Shape クラスで定義されています。Circle クラスと Rectangle クラスは、Shape クラスを継承するためにこの関数を継承する必要があります。そうしないと、コンパイル エラーが報告されます。 main 関数では、Circle オブジェクトと Rectangle オブジェクトへのポインタを指すことによってポリモーフィズムが実現されます。
要約:
C でポリモーフィズムを実装するには多くの方法があることがわかりますが、その中で、関数のオーバーロードと仮想関数が最も一般的に使用される 2 つの方法です。ポリモーフィズムを実装すると、コードの柔軟性と再利用性が大幅に向上し、コードの読み取りと保守も容易になります。実際のプログラミングでは、ポリモーフィズムの性質と用途を理解することに重点を置き、ポリモーフィズムを使用する方法とテクニックを習得して、プログラミング能力を強化する必要があります。
以上がC++ でのポリモーフィズムの探索の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。