C言語でポリモーフィズムを実現するには、どうすればいいですか?
C言語では、ポリモーフィズムを実装するには、関数ポインターと構造体を使用します。具体的な手順は以下の通りです。
- 異なる派生クラスのメンバー関数を指すための関数ポインタメンバーを含むベース構造体を定義します。
typedef struct {
void (*func)();
} Base;
- 自明クラスの構造を定義し、そこで具体的なメンバー関数を定義します。
typedef struct {
Base base;
// 派生类的其他成员
} Derived;
- 派生クラスのメンバー関数を実装する。
void derived_func() {
// 派生类的具体实现
}
- 派生クラスのメンバ関数を基本クラスの関数ポインタに代入する。
Derived derived;
Base* base = (Base*)&derived;
base->func = derived_func;
- 多態関数を呼び出す。
base->func();
これによって、C言語でのポリモーフィズムが実現されました。実行時に、関数ポインタが指す具体的なメンバー関数に基づいて、異なる派生クラスの実装が呼び出されます。