C++ の構造体とクラスの違い
-
C++ の
struct
とclass
キーワード -
class
と C++ のstruct
のアクセス修飾子 -
C++ の
class
とstruct
のメモリ割り当て -
C++ の
class
とstruct
の Null 値 -
class
の値型 vs. 参照型 vs. C++ のstruct
-
class
のセキュリティと C++ のstruct
のセキュリティ
この記事では、C++ における構造体とクラスの違いについて説明します。 この記事は、C++ の最新バージョンについて書かれています。 古いバージョンの struct
と class
の間には、さらに多くの制限と違いがありました。
ほとんどの場合、structure
は class
に非常に似ていますが、違いはほとんどありません。 それらを1つずつ見てみましょう。
C++ の struct
と class
キーワード
構造体は struct
キーワードを使用して宣言されますが、class
キーワードはクラスを宣言するために使用されます。
クラスの構文:
class demo {
private:
private
members...
.
public : public members....
};
構造体の構文:
struct demo {
members1;
members2;
...
};
class
と C++ の struct
のアクセス修飾子
C++の中で、class
と struct
は、public
、private
、および protected
の3つのアクセス指定子を持っていますが、C++において、構造体のメンバーはデフォルトで public
であり、クラスのメンバーはデフォルトで private
です。
class
を使用したコード例:
#include <bits/stdc++.h>
using namespace std;
class demo {
int temp;
};
int main() {
demo d;
d.temp = 20;
}
出力: temp
はプライベートであるため、コンパイル エラーが発生します。
[Error] int demo::temp is private
[Error] within this context
struct
を使用したコード例:
#include <bits/stdc++.h>
using namespace std;
struct demo {
int temp;
};
int main() {
demo d;
d.temp = 20;
cout << d.temp;
}
出力:
20
C++ の class
と struct
のメモリ割り当て
構造体を作成して実装するときは必ず stack
領域にメモリが割り当てられますが、クラスを作成して実装すると heap
領域にメモリが割り当てられます。
C++ の class
と struct
の Null 値
構造体のメンバーは null
値にすることはできませんが、クラス メンバーは null
値を持つことができます。
class
の値型 vs. 参照型 vs. C++ の struct
C++ では、構造体は値型で、クラスは参照型です。 値型はその内容をスタックに格納し、宣言された場所に値を直接保持するため、構造体変数が作成されるたびに、変数には 構造体
のデータが直接含まれます。
しかし、参照型のクラスの場合、オブジェクトが作成されるたびに、データの代わりにオブジェクトへの 参照
が保持されます。
class
のセキュリティと C++ の struct
のセキュリティ
エンドユーザーの実装の詳細を隠すことはできないため、セキュリティは構造に関する主要な問題ですが、クラスの実装では設計の詳細を簡単に隠すことができます。
違いを表形式でまとめてみましょう。
構造 | クラス |
---|---|
struct キーワードを使用して、構造体を定義します。 |
クラスを定義するには、class キーワードを使用します。 |
安全性が低い。 | 実装をエンドユーザーから隠すことができるため、より安全です。 |
メモリは stack 領域に割り当てられます。 |
メモリは heap 領域に割り当てられます。 |
メンバーは null 値を持つことはできません。 |
メンバーは null 値を持つことができます。 |
アクセス修飾子はデフォルトで public です。 |
アクセス修飾子はデフォルトで private です。 |
構造体は 値型 です。 |
クラスは 参照型 です。 |