導入
関連するデータをひとまとめにしたいとき、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;
}
class も struct とほぼ同じですが、既定の公開範囲が違います。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 を使います。