2011-12-19 11 views
0

オブジェクト指向プログラミングでは、クラス間で制御を渡すことができます。私はオブジェクト指向プログラミング言語ではないのでC言語ではクラスが存在しないことを認識しますが、新しいファイルを書くことができます。物事をもっと簡単にするために?Cで継承するコントロール

私が本当に求めていることです:どのように私はプログラムの外延長に制御を渡す、と私はプログラムの特別な型を使用する必要があります(.dllファイルなど)Cでは

+0

ライブラリについて話していますか?次に、GCCで '-l'フラグを使うことができます – check123

+1

何の制御?キーボード、マウス、イベント処理? –

答えて

3

を役に立てば幸い、C++プログラムの構造組織のローミングサービスで多くを導入していないがC++。クラスのメソッドを呼び出すだけです。クラスメソッドは、いくつかの追加機能を持つ関数です。したがって、の同じ手法をCのようにCで制御を渡すことができます。例:

//C++ 
class A { 
public: 
A(int n) { /*...*/ } 
int DoSomething() { /*...*/ } 
protected: 
int m_SomeMember; 
double m_AnotherMember; 
}; 

AInst(8); 
int x = AInst.DoSomething(); 

//C 
struct A { 
int m_SomeMember; 
double m_AnotherMember; 
}; 

void InitializeA(struct A* pa, int n) 
{ 
/*...*/ 
} 

int DoSomethingWithA(struct A* pa) 
{ 
/*...*/ 
} 

struct A AStructInst; 
InitializeA(&AStructInst, 8); 
int y = DoSomethingWithA(&AStructInst); 

唯一の問題は、C++と比較して、Cでプログラムを構造化するためにより多くの努力が必要な場合があります。たとえば、後者の言語はオブジェクトの適切な初期化と破棄に注意を払いますが、Cではこのようなものを自分で処理する必要があります。

スタティックライブラリまたはダイナミックライブラリを使用する場合、2つの言語はほとんど同じです。関数名のmangling、vtablesなどの微妙な違いのために、C++ライブラリを他のコンパイラやプラットフォームに移植できるようにしようとすると、より多くの問題が生じます。

+0

まさに私が求めていたもの。ありがとう。 – JAW1025

1

行い、関数間で "制御を渡します"。 C++では、クラスまたは関数の間で "制御を渡します"。

それ以外の違いはほとんどありません。ある言語で書かれたプログラムの動作は、他の言語で書かれた同様のプログラムの実行時の挙動と事実上区別できません。

"共有ライブラリ"を考えているのでしょうか?共有ライブラリはプラットフォーム(WindowsとLinuxなど)に依存し、プログラミング言語(CとC++)ではそれほど異なりません。

あるいは、あなたは「ランタイム読み込み可能クラス」(JavaやC#など)を考えているかもしれません。これらは「仮想マシン」(Java JREや.NETランタイムなど)に依存します。 CやC++はそのようなVMの中で実行されず、共有ライブラリが提供する機能を超えた「ランタイム読み込み可能クラス」もサポートしていません(共有ライブラリもCまたはC++で同等に機能します)。

「C.

に比べてあなたは本当にcontroll クラスで間を通過していない場合、基本的に...