2011-02-04 5 views
1

重複の可能性:
Object oriented programming in C
Can you write object oriented code in C?オブジェクト指向プログラミングを真似る純粋なC?

こんにちは

私は模倣がオブジェクト指向の純粋なCのためのいくつかのコーディングスタイルはプログラミングがいることを知っている: "メソッド呼び出し"( "オブジェクト"(構造体)の.cと.hの組織、およびように...

上の機能)

あなたの習慣は何ですか?

その上でいくつかの良いチュートリアルはありますか?または例?

+0

ロング良いでdefinivelyオブジェクト指向プログラミングの非常に良い例である:例えば、http://www.planetpdf.com/codecuts/pdfs/ooc.pdf –

+0

多くの重複[Cでオブジェクト指向プログラミング(http://stackoverflow.com/questions/2181079/object-oriented-programming-in-c)、[実験:オブジェクト指向C(http://stackoverflow.com/questions/ 4103704 /実験-オブジェクト指向-C)、[あなたがCでオブジェクト指向のコードを書くことはできますか?](http://stackoverflow.com/questions/351733/can-you-write-object-oriented-code-in-c )など... –

+0

http://www.ijg.org/をご覧ください。それはCのように見えません。 – ruslik

答えて

0

一つの一般的なアプローチは、次いで、「この」ポインタとしてその構造体へのポインタを取る関数の数を定義し、構造体を前方宣言するヘッダーファイルを設計することです。たとえば、

struct vector; // Forward-declaration; no implementation shown. 

struct vector* VectorNew(/* ... */); 
void VectorAppend(struct vector* this, void* toAppend); 
size_t VectorSize(const struct vector* this); 

次に、.cファイルでは、完全な構造体定義と関連する関数定義を実際に提供することができます。これにより、クライアントが.cファイル内にあるので、クライアントは未処理のフィールドを読み取ることができず、一貫した接頭辞を使用して「メンバー関数」に一種の「名前空間」を与えます。

+0

このアイディアについては、標準ライブラリの 'FILE *'タイプを見てください。もちろん、これはCで実装できるオブジェクト指向のアイデアの一部に過ぎません。 –

3

GTK+ Project ウィジェットの階層を使用して、Cの中のOOがどのように見えるかについての良い印象を得ることができる大量のコードから導き出す必要があります。 「イントロスペクション」と呼ばれるReflexion(Javaや.NETのような他のプログラミングフレームワークには多かれ少なかれ組み込まれています)のかなり良い実装さえあります。

のGtk + C.

関連する問題