C言語でオブジェクト指向的なことをする

気がつけばすっかり怠けていたブログ更新

今回は意味もなくC言語オブジェクト指向をしてみようと思ったので以下の3つを実装する方法について考えてみた

カプセル化

・継承

ポリモーフィズム


カプセル化

ヘッダファイルにメソッドとして必要な関数と同じシグニチャな関数へのポインタののみを持った構造体とコンストラクタ的な役割を持つ関数のプロトタイプを用意

コンストラクタは構造体へのポインタを引数か戻り値にする

メソッドの実装となる関数とコンストラクタの実装を別のソースに記述

また、必要な、プロパティはこのファイルのグローバル変数として定義

コンストラクタの実装はメモリ確保後に必要な初期化処理と構造体の関数へのポインタとメソッドの実装を結び付ける処理を行う

使う側はヘッダファイルをインクールドして構造体を使う
ソースは見えてない(extarnalするなよww)ので実質すべての処理を構造体の関数へのポインタを通して行うこととなりプロパティが隠蔽される


継承

簡単かつ単純な実装がいいので子クラスとして定義する構造体が親クラスとして定義されている構造体をメンバとして持つ

子クラスのコンストラクタで親クラスのコンストラクタを呼び出すのを忘れないこと


ポリモーフィズム

子クラス独自実装のメソッドとなる関数を用意し、継承の実装の際に子クラスのコンストラクタで親クラスの関数へのポインタの参照先をそちらにする

親クラスの変数に子クラスを入れることはできないが、子クラスから親クラスを取得して、メンバ関数を実行した際には子クラスの処理が走る


とりあえずこんな感じ

酔った勢いで書いているので何か問題があれば教えてください