本文へスキップ
BecomeCoder

C++コース · 第10章 クラスの基礎 ― 自分だけの型を作る · レッスン37

struct と class ― データをまとめる

ブラウザで完結

導入

関連するデータをひとまとめにしたいとき、struct(構造体)や classクラス)で「自分だけの型」を定義できます。オブジェクト指向の入口です。

説明

struct は、複数の値をまとめた型です。点(x, y)のような「組」を表すのに向いています。作った変数(インスタンス)の各要素には .(ドット)でアクセスします。

#include <iostream>
using namespace std;

struct Point {
    int x;
    int y;
};

int main() {
    Point p;
    p.x = 3;
    p.y = 4;
    cout << "(" << p.x << ", " << p.y << ")" << endl;   // (3, 4)

    Point q = {10, 20};   // まとめて初期化
    cout << q.x + q.y << endl;   // 30
    return 0;
}

classstruct とほぼ同じですが、既定の公開範囲が違います。struct は既定で public(外から見える)、class は既定で private(外から隠す)です。この「隠す」しくみ(カプセル化)がクラスの核心です。

flowchart TB
  a["struct:既定 public<br/>単純なデータの束に向く"]
  b["class:既定 private<br/>データを隠して守るのに向く"]
  a --- b

private にしたメンバは、クラスの外から直接触れません。public に置いた部分だけが外から使えます。

#include <iostream>
using namespace std;

class Counter {
private:
    int count = 0;      // 外から直接触らせない
public:
    void increment() { count++; }   // 公開した操作
    int get() { return count; }
};

int main() {
    Counter c;
    c.increment();
    c.increment();
    // c.count = 100;   // ← エラー(private なので外から触れない)
    cout << c.get() << endl;   // 2
    return 0;
}

まとめ

struct は「データの束」、class は「データを隠して守る」のに向きます。違いは既定の公開範囲だけですが、慣習として、単純なデータは struct、振る舞いを持つ部品は class を使います。

実際に動かしてみよう

下のエディタにC++を書いて「コンパイル & 実行」を押すと、ブラウザ内で本物のC++コンパイラ(clang + libc++)がその場でコンパイルして実行し、出力が表示されます。std::string・vector・クラス・テンプレート・STL などモダンC++がそのまま動きます。本文の例を書き換えて試しながら進めましょう(初回だけコンパイラの読み込みに時間がかかります。以降はキャッシュされます。この回は標準入力(cin)は使わず、値はコードに直接書きます)。

C/C++ — ブラウザ内で本物のコンパイラで実行

ブラウザ内で本物のC/C++コンパイラ(clang + libc++ / WebAssembly)を動かします。構造体・malloc/free・std::string・vector・クラス・テンプレート・STL などがそのまま実行できます(初回のみコンパイラの読み込みに時間がかかります。以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。