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