クラスと構造体の主な違いは、クラスが参照型のデータ型であるのに対して、構造体は値型のデータ型であることです。
プログラミングにおいて、変数とはデータを格納するための記憶領域のことです。
各変数は、格納できるデータ型が決まっています。
主なデータ型は、値型と参照型の2つです。
値型は、値を直接代入する。
また、int、float、doubleなどは、値型のデータ型の一例です。
一方、参照型のデータ型は、実際のデータを格納しない。
その代わり、変数への参照を格納する。
プログラミングの概念として、ClassとStructureがあります。
前述したように、クラスは参照型データ型であるのに対し、構造体は値型データ型です。
クラスとは
オブジェクト指向プログラミング(OOP)では、すべてがオブジェクトです。
オブジェクトはクラスを使って作られる。
クラスは、オブジェクトを作成するための設計図です。
また、クラスは属性とメソッドで構成されています。
属性はプロパティとも呼ばれ、オブジェクトの特性を定義する。
メソッドは、オブジェクトの振る舞いを定義します。
さらに、クラスを使ってオブジェクトを作成することをインスタンス化と呼びます。
図 1: クラスの UML 図
クラスのメンバーとは、クラスの属性とメソッドのことです。
主に、OOPにおけるデータ隠蔽をサポートするために、public、private、protectedの3つのアクセス指定子で構成される。
第一に、publicなメンバーはすべてのクラスから見える。
第二に、privateは同じクラス内でのみ見ることができます。
第三に、protectedメンバは、パッケージ内とサブクラスで見ることができます。
さらに、クラスにはコンストラクタと呼ばれる特別な関数もあります。
これは、新しいオブジェクトを作成するのに役立ちます。
さらに、コンストラクタはクラスと同じ名前を持ち、戻り値の型を持ちません。
デフォルトのコンストラクタであることも、パラメータ化されたコンストラクタであることもあります。
クラスの例を以下に示します。
クラス Employee{
public int id;
public string name;
}
メインプログラムは以下の通りです。
Employee e = new Employee();
e.id=101;
e.name= “Ann”;
上記のプログラムによると、このクラスは id と name という2つのプロパティを持ちます。
これらは public であり、他のクラスからアクセス可能です。
メインプログラムでは、コンストラクタで Employee 型のオブジェクトを生成しています。
そして、idとnameに値を与えています。
構造とは
構造体とは、複数のデータ型を保持する1つの変数のことです。
言い換えれば、異なるデータ型を持つ変数の集合体であり、すべて1つの名前で参照される。
構造体宣言は、構造体のインスタンスを生成するためのテンプレートを形成します。
以下に例を示します。
構造体Employee{
public int id;
public string name;
};
メインプログラムは以下の通りです。
社員e;
e.id=101;
e.name= “Ann”;
上記のプログラムによると、構造体にはidとnameの2つのプロパティがあります。
メインプログラムでは、’Employee e’ ステートメントで ‘e’ を構造体型 Employee として宣言しています。
そして、idとnameに値を与えています。
クラスと構造の違い
定義
クラスは、ある種のオブジェクトに共通する変数とメソッドを定義した設計図です。
参照型のデータ型です。
逆に、構造体は、さまざまなデータ型の関連データを保持できる値型データ型です。
したがって、クラスと構造体の主な違いは、データ型にあります。
継承
クラスは他のクラスや構造体を継承することができますが、構造体は他のクラスや構造体を継承することはできません。
デストラクタ
また、デストラクタも Class と Structure の違いの一つです。
クラスはデストラクタを持つことができますが、構造体はデストラクタを持ちません。
インスタンス化
さらに、クラスと構造体のもう一つの違いは、クラスがnewキーワードを使ってオブジェクトをインスタンス化するのに対して、構造体はnewキーワードを使わずにオブジェクトをインスタンス化することです。
インスタンス
また、クラスのインスタンスはオブジェクトであるのに対して、構造体のインスタンスは構造体変数です。
したがって、この点もClassとStructureの違いです。
キーワード
また、キーワード “class “はクラスを定義します。
キーワード “struct “は、Structureを定義します。
デフォルトのアクセス指定子
また、クラスでは、アクセス指定子が宣言されていない場合、そのメンバはprivateとなります。
また、構造体では、アクセス指定子が宣言されていない場合、メンバはpublicとなります。
結論
プログラミングでは、データを保存することが必要です。
変数とは、データを格納するための場所です。
変数には、値型と参照型の2種類があります。
クラスと構造体の基本的な違いは、クラスが参照型データ型であるのに対して、構造体は値型データ型であることです。