2011-12-23 15 views
1

カプセル化の概念については疑問があります。構造体とのカプセル化

C言語でも 'struct'データ型によるカプセル化は行われませんか?

構造体に存在するデータ変数と関数は、struct変数によってのみ呼び出すことができます。システム内の他の変数はありません。データが隠れていませんか?

私はこの概念をC++のカプセル化を理解するために関連づけようとしています。

+1

あなたの質問は少し不明です。あなたはそれを改善していただけますか? – cnicutar

+1

Cでは、 "関数が構造体に存在する"ことはできません。私はあなたのコンパイラが誤って構成されていると思うし、C + +をコンパイルしています。 – pmg

+0

私はC言語で何年もプログラムしていませんが、構造体へのポインタを持つオブジェクトから構造体変数を参照できることを覚えておいてください。 – Sergio

答えて

2

本当に唯一のあなたは、より詳細な説明については、この記事を見ることができますCの構造体の「部分的な隠れが」存在がある:

Is there any workaround for making a structure member somehow 'private' in C?

しかし、C++でのカプセル化は比較的類似しています。クライアントコードからすべてのデータメンバーを完全に非表示にすることはできません(たとえそれらがprivateセクションにあっても)。カプセル化の一見「違反」ですが、これは言語の性質です。

+0

RageDに感謝します。はい、以前にスレッドをチェックしました。私は、CがC++のみの構造体の関数をサポートしていないことは知らないと思います。 C++構造体とクラスは同様のカプセル化メカニズムを提供していますか?両方ともデータの束縛と隠蔽を提供する(継承によるカプセル化のような違いがあるが) – vinaygarg

+0

はい、それらは同様のメカニズムを提供する。 C++の 'struct'と' class'の主な違いは、デフォルトメンバーが 'struct'の' public'と 'class'の' private'です – RageD

関連する問題