プログラミング

C++超入門⑨ クラスの基本を知ろう

class、オブジェクト、public、private、コンストラクタ、メンバー関数を使い、データと処理を一つにまとめます。

第9回では、C++でよく使われるクラスの基本を学びます。

構造体が関係するデータをまとめる仕組みなら、クラスはデータと、そのデータを操作する処理をまとめる仕組みです。

この回でできるようになること

  • classで新しい型を作る
  • publicとprivateを使い分ける
  • コンストラクタで最初の状態を作る
  • メンバー関数でデータを変更する

クラスの基本

プレイヤーの名前とHP、それを操作する処理をクラスへまとめます。

#include <iostream>
#include <string>

class Player {
public:
    Player(std::string initialName) {
        name = initialName;
    }

    void takeDamage(int damage) {
        hp = hp - damage;

        if (hp < 0) {
            hp = 0;
        }
    }

    void show() {
        std::cout << name << ": HP " << hp << '\n';
    }

private:
    std::string name;
    int hp = 100;
};

class Playerの中に、データと関数が入っています。

クラスの中にある関数をメンバー関数と呼びます。

publicとprivate

指定 意味
public クラスの外から使える
private クラスの中だけで使える

この例では、takeDamageとshowは外から使えます。nameとhpは外から直接変更できません。

HPをprivateにすると、マイナスにならないようにする処理を必ずtakeDamageの中で通せます。

コンストラクタ

クラス名と同じ名前を持つ、戻り値のない特別な関数をコンストラクタと呼びます。

Player(std::string initialName) {
    name = initialName;
}

Player型の値を作ったときに自動で呼ばれ、最初の名前を設定します。

オブジェクトを作る

クラスを設計図として、実際に作った値をオブジェクトと呼びます。

int main() {
    Player hero("Aoi");

    hero.show();
    hero.takeDamage(30);
    hero.show();
    return 0;
}

実行結果は次のようになります。

Aoi: HP 100
Aoi: HP 70

hero.takeDamage(30)のように、ドットを使ってメンバー関数を呼び出します。

構造体とクラスの違い

C++では、structでも関数やprivateを使えます。classとの大きな違いは、何も指定しなかった場合の公開範囲です。

書き方 初期状態
struct public
class private

学び始めのうちは、データを分かりやすくまとめるだけならstruct、データを守りながら処理もまとめたいならclass、と考えるとよいでしょう。

小さな練習

残高を保存するBankAccountクラスを作ってください。

  • privateにint balanceを用意する
  • publicにdeposit関数を用意する
  • show関数で現在の残高を表示する

余裕があれば、0より小さい金額は追加しないようにif文を使ってみましょう。

模範解答

#include <iostream>

class BankAccount {
public:
    void deposit(int amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    void show() {
        std::cout << "残高: " << balance << "円\n";
    }

private:
    int balance = 0;
};

int main() {
    BankAccount account;
    account.deposit(3000);
    account.deposit(-500);
    account.show();
    return 0;
}

解説

balanceはprivateなので、クラスの外から直接変更できません。depositの中で0より大きい金額だけを加えるため、-500は無視され、残高は3000円と表示されます。

まとめ

  • クラスは、データとそれを操作する関数をまとめます。
  • privateを使うと、外から勝手に値を変更できないようにできます。
  • クラスから作った実際の値をオブジェクトと呼びます。

前の記事:C++超入門⑧ 構造体とenumでデータを整理しよう

次の記事:C++超入門⑩ 点数管理プログラムを完成させよう

← 記事一覧へ戻る