前回
説明
C言語は、手続型言語として有名な言語です。一見、オブジェクト指向設計やオブジェクト指向プログラミングには適さない言語として見られがちですが、C言語の性質上、構造体を用いることでオブジェクト指向のプログラミング技法は成立します。
今回は、オブジェクト指向のプログラミング技法の一つとして仮想関数の考え方をプログラミングしてみます。C言語では、オブジェクト指向における仮想関数の完全な方法は実現できませんが、仮想関数の考え方に近い形で実現することができます。
参考ページ
モノづくりC言語塾 C言語 関数ポインタ【ポインタを使って関数を呼ぶ仕組み解説】
参考文献
準備
console
clang -lm sample.c -o sample
./sample
もしくはオンラインコンパイラを使用します。
オンラインコンパイラ
Cコンパイラを使ってください。
ソースコード
sample.c
#include <stdio.h>
// 基底クラス
typedef struct {
void (*print)(void*);
} Base;
void basePrint(void* self) {
printf("Base struct\n");
}
// 派生クラス
typedef struct {
Base base;
void (*print)(void*);
} Derived;
void derivedPrint(void* self) {
printf("Derived struct\n");
}
int main() {
Base base;
base.print = basePrint;
Derived derived;
derived.base.print = derivedPrint;
Base* ptr = &base;
ptr->print(ptr);
ptr = (Base*)&derived;
ptr->print(ptr);
return 0;
}
実行結果
console
Base struct
Derived struct
考察
結果から考察すると、C言語は手続型言語ですが、構造体を用いることでオブジェクト指向プログラミングの考え方は取り入れることができます。