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 です。 |
構造体は 値型 です。 |
クラスは 参照型 です。 |
