1. ホーム
  2. c

C言語でOOスタイルのポリモーフィズムをシミュレートするには?

2023-07-20 01:03:42

質問

でOO的なコードを書く方法はありますか? C プログラミング言語で OO ライクなコードを書く方法はありますか?


こちらもご覧ください。

"[c] oo"で検索して見つかりました。

どのように解決するのですか?

最初の C++ コンパイラ ("C with classes") は実際に C コードを生成するでしょうから、それは間違いなく可能でしょう。

基本的に、ベースクラスは構造体です。派生構造体は最初の位置にベース構造体を含める必要があり、これにより "derived" 構造体へのポインタはベース構造体への有効なポインタにもなります。

typedef struct {
   data member_x;
} base;

typedef struct {
   struct base;
   data member_y;
} derived;

void function_on_base(struct base * a); // here I can pass both pointers to derived and to base

void function_on_derived(struct derived * b); // here I must pass a pointer to the derived class

関数は関数ポインタとして構造体の一部にすることができるので、p->call(p) のような構文が可能になりますが、それでも関数自体に構造体へのポインタを明示的に渡す必要があります。