
比較表
比較基準 | 構造 | クラス |
---|---|---|
基本 | アクセス指定子が宣言されていない場合、デフォルトですべてのメンバは 'public'です。 | アクセス指定子が宣言されていない場合、デフォルトですべてのメンバは 'private'になります。 |
宣言 | struct structure_name { type struct_element 1; type struct_element 2; type struct_element 3; 。 。 。 ; | クラスclass_name { データメンバー メンバー関数 ; |
インスタンス | '構造体'のインスタンスは '構造体変数'と呼ばれます。 | 「クラス」のインスタンスは「オブジェクト」と呼ばれます。 |
構造の定義
構造体は、すべて同じ名前で参照される、異なるデータ型の変数の集まりです。 構造体宣言は、構造体のインスタンスを作成するために使用されるテンプレートを形成します。 構造体は次のように宣言されています。
struct sname {type struct_element1; type struct_element2; type struct_element3; 。 。 。 変数1、変数2 、. 。 ;
キーワード 'struct'は、構造体が宣言されていることをコンパイラに定義します。 'sname'は構造体に付けられた名前を表します。 構造体宣言は、ステートメントと見なされるため、常にセミコロンで終了します。 上記のコード(variable1、variable2)のように終了前に構造体のインスタンスを宣言することも、構造体の名前の前にインスタンス名を記述することによってmain()で構造体のインスタンスを宣言することもできます。
//例 main(){名前S1、S2; }
ここで、S1とS2は構造体のインスタンスです。 構造体のインスタンスは「構造体変数」と呼ばれます。 構造体の内部で宣言された要素は、ドット(。)演算子を使用して構造体変数を介してアクセスできます。
//例S1 struct_element1;
- 構造体の配列を作成することもできます。そのためには、まず構造体を宣言してから、その型の配列を宣言する必要があります。
//サンプルstruct sname sarray [10];
上記のステートメントは、10個の変数を含む 'sarray'という名前の配列を作成し、各変数は 'sname'で定義されているように編成されています。
- 構造体メンバを関数に渡したり、構造体全体を関数に渡したりできます。
- 整数ポインタ、配列ポインタ、構造体ポインタのように、構造体変数名の前に '*'を置くことによって宣言することもできます。
//サンプルstruct sname * S1;
注意:
'構造'要素は連続したメモリ位置に格納されています。
クラスの定義
OOPのクラスは、クラスのデータメンバーにアクセスするために使用されるデータメンバーとメンバー関数を含む新しい型を定義します。 クラスのインスタンスは「オブジェクト」と呼ばれ、それぞれがクラスと同じ編成を持ちます。 クラスは論理的な抽象概念ですが、オブジェクトは物理的に存在します。 このクラスは構文的に構造と似ています。 クラスは次のように宣言できます。
class class_name {プライベートデータメンバーとメンバー関数。 access_specifier type data_member; タイプmem_funct(パラメータリスト){。 。 オブジェクトリスト。
ここで、クラスはクラスが宣言されたことをコンパイラに宣言するキーワードです。 OOPの主な機能はデータの隠蔽です。これは、「public」、「private」、「protected」の3つのアクセス指定子を提供することによって実現されます。 データメンバーまたはメンバー関数を宣言しているときにクラスでアクセス指定子を指定しないと、デフォルトですべてがプライベートと見なされます。 パブリックアクセス指定子を使用すると、プログラムの他の部分から関数やデータにアクセスできます。 クラスの非公開メンバーは、そのクラスのメンバーだけがアクセスできます。 保護されたアクセス指定子は継承中に適用されます。 アクセス指定子を宣言すると、プログラム全体で変更することはできません。
オブジェクトはクラスのインスタンスに他なりません。 クラスのメンバーは、ドット(。)演算子を使用して同じクラスのオブジェクトによってアクセスされます。
//object.mem_funct(arguments);
- オブジェクトは引数として関数に渡すこともできます。
- オブジェクトへのポインタも作成できます。
構造とクラスの主な違い
- 構造体とクラスの主な違いは、デフォルトでは構造体のすべてのメンバがパブリックであるのに対し、デフォルトではクラスのすべてのメンバがプライベートであることです。
類似点:
- C ++では、構造とクラスの両方が構文的に同等です。
- 構造体もクラスも、メンバーの一部を非公開として宣言できます。
- 構造体またはクラスの名前は、スタンドアロン型として使用できます。
- 構造とクラスの両方が継承のメカニズムをサポートしています。
結論:
構造体はデータ隠蔽を許さない、 'struct'データ型は組み込み型のように扱うことができず、構造体は継承をサポートしないので、Cの構造体にはいくつかの制限がありました。 C ++の構造体はこれらの制限を克服しました。 C ++では、クラスは構造の拡張版です。 プログラマーは、このクラスを使用してデータと関数の両方を保持し、データを保持するためだけに構造化することが容易であることに気付きます。