09_クラスの定義と使い方

はじめに

この章では、C++でオブジェクト指向プログラミングの基本となる「クラス」について学びます。

クラスとは何か

クラスは「設計図」です。

最低限のクラス定義と実行例

C++で最もシンプルなクラスの例として、次のような形からスタートできます。まずは読めるようになることを目指してください。

#include <iostream>
using namespace std;

// クラスの定義
class Greeting {
public:
    void sayHello() {
        cout << "Hello, World!" << endl;
    }
};

int main() {
    Greeting g;  // クラスからオブジェクトを作成
    g.sayHello();  // メンバ関数を呼び出し

    return 0;
}
解説

このように、クラスは型を作り、オブジェクトはその型の実体という関係になります。

クラスの定義と使い方(Student例)

#include <iostream>
using namespace std;

// クラスの定義
class Student {
public:
    string name;
    int score;

    void show() {
        cout << name << " の点数は " << score << " 点です。" << endl;
    }
};

int main() {
    // クラスからオブジェクトを作成
    Student s;
    s.name = "Tanaka";
    s.score = 80;

    s.show();  // メンバ関数を呼び出し

    return 0;
}
解説

アクセス修飾子とは(public / private / protected)

C++のクラスでは、メンバのアクセス範囲を指定できます。

修飾子 アクセスできる範囲 用途
public どこからでも可 外部から使わせたい関数や変数
private クラス内部からのみ可 外部に見せたくないデータや内部処理
protected クラスとその派生クラスから可 継承先には公開したいが、外部からは隠したい場合

例:privateな変数とpublicな関数の使い方

class Account {
private:
    int balance;

public:
    Account() {
        balance = 0;
    }

    void deposit(int amount) {
        balance += amount;
    }

    void show() {
        cout << "残高: " << balance << "円" << endl;
    }
};

このように、データを隠して操作だけを公開するのが基本的なクラス設計です。

メソッドとメンバ関数について

オブジェクト指向の話をしていると「メソッド」という言葉を耳にすることがあります。C++ではあまり「メソッド」という言葉は使われず、代わりに「メンバ関数」と呼ぶのが一般的です。

まとめ:メソッドもメンバ関数も意味は同じ。ただし、C++では「メンバ関数」と呼ぶのが一般的。C++は「関数」中心のC言語から進化したからです。

コーディング演習

演習1:基本コードを動かす

09_01_class.cpp を作成し、次のコードを入力して実行しましょう。
// hello_class.cpp
#include <iostream>
using namespace std;

class Greeting {
public:
    void sayHello() {
        cout << "Hello, World!" << endl;
    }
};

int main() {
    Greeting g;
    g.sayHello();
    return 0;
}

演習2:コードを改造する

09_01_class.cpp をコピーして 09_02_class_mod.cpp として保存し、次の変更を加えてみましょう:
ヒントを見る cout << name << " の点数は " << score << " 点です。" << endl; のように出力できます。
main関数内で s.name = "Tanaka"; のようにメンバ変数に値を代入してから s.show(); を呼び出しましょう。

理解度チェック

問題09-1

次のコードを実行すると何が表示されますか?

#include <iostream>
using namespace std;

class Book {
public:
    string title;
    void print() {
        cout << "タイトル: " << title << endl;
    }
};

int main() {
    Book b;
    b.title = "C++入門";
    b.print();
    return 0;
}
解説を表示 正解:ア
print() の中で "タイトル: " << title と出力しているので、「タイトル: C++入門」が表示されます。

問題09-2

クラスの説明として正しいものはどれですか?

解説を表示 正解:イ
クラスは「型の設計図」であり、クラス名 変数名; でオブジェクト(実体)を作ります。クラス自体はメモリを占有しません。

問題09-3

public: の説明として正しいものはどれですか?

解説を表示 正解:ウ
public: で宣言されたメンバはクラスの外(main関数など)からも自由にアクセスできます。

問題09-4

次のコードはコンパイルエラーになります。その理由はどれですか?

class Item {
private:
    int price;
};

int main() {
    Item x;
    x.price = 100;  // ここがエラー
    return 0;
}
解説を表示 正解:イ
private: で宣言されたメンバはクラスの外からアクセスできません。public: なメンバ関数を通じて操作する必要があります。

まとめ