C++ の構造体とクラスの違い

Suraj P 2023年10月12日
  1. C++ の structclass キーワード
  2. class と C++ の struct のアクセス修飾子
  3. C++ の classstruct のメモリ割り当て
  4. C++ の classstruct の Null 値
  5. class の値型 vs. 参照型 vs. C++ の struct
  6. class のセキュリティと C++ の struct のセキュリティ
C++ の構造体とクラスの違い

この記事では、C++ における構造体とクラスの違いについて説明します。 この記事は、C++ の最新バージョンについて書かれています。 古いバージョンの structclass の間には、さらに多くの制限と違いがありました。

ほとんどの場合、structureclass に非常に似ていますが、違いはほとんどありません。 それらを1つずつ見てみましょう。

C++ の structclass キーワード

構造体は struct キーワードを使用して宣言されますが、class キーワードはクラスを宣言するために使用されます。

クラスの構文:

class demo {
 private:
 private
  members...
      .

      public : public members....
};

構造体の構文:

struct demo {
  members1;
  members2;
  ...
};

class と C++ の struct のアクセス修飾子

C++の中で、classstruct は、publicprivate、および 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++ の classstruct のメモリ割り当て

構造体を作成して実装するときは必ず stack 領域にメモリが割り当てられますが、クラスを作成して実装すると heap 領域にメモリが割り当てられます。

C++ の classstruct の Null 値

構造体のメンバーは null 値にすることはできませんが、クラス メンバーは null 値を持つことができます。

class の値型 vs. 参照型 vs. C++ の struct

C++ では、構造体は値型で、クラスは参照型です。 値型はその内容をスタックに格納し、宣言された場所に値を直接保持するため、構造体変数が作成されるたびに、変数には 構造体 のデータが直接含まれます。

しかし、参照型のクラスの場合、オブジェクトが作成されるたびに、データの代わりにオブジェクトへの 参照 が保持されます。

class のセキュリティと C++ の struct のセキュリティ

エンドユーザーの実装の詳細を隠すことはできないため、セキュリティは構造に関する主要な問題ですが、クラスの実装では設計の詳細を簡単に隠すことができます。

違いを表形式でまとめてみましょう。

構造 クラス
struct キーワードを使用して、構造体を定義します。 クラスを定義するには、class キーワードを使用します。
安全性が低い。 実装をエンドユーザーから隠すことができるため、より安全です。
メモリは stack 領域に割り当てられます。 メモリは heap 領域に割り当てられます。
メンバーは null 値を持つことはできません。 メンバーは null 値を持つことができます。
アクセス修飾子はデフォルトで public です。 アクセス修飾子はデフォルトで private です。
構造体は 値型 です。 クラスは 参照型 です。
著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

関連記事 - C++ Class