C++入門シリーズの最終回です。クラスはデータとそれを操作する関数を1つの単位にまとめます。オブジェクト指向プログラミングの核です。
クラスとは#
クラスは設計図です。オブジェクトはその設計図から作られる具体的な実体です。
#include <iostream>
#include <string>
class Player {
public:
std::string name;
int level = 1;
void greet() const {
std::cout << "Hello, I am " << name << " (level " << level << ").\n";
}
};
int main() {
Player p; // オブジェクト
p.name = "Ada";
p.level = 5;
p.greet(); // Hello, I am Ada (level 5).
}cppアクセス指定子#
public:— どこからでもアクセス可能。private:— クラス内部からのみアクセス可能。
データは通常privateにし、publicなメンバ関数をインターフェースにします。これがカプセル化です。
class Counter {
private:
int count = 0;
public:
void increment() { ++count; }
int get() const { return count; }
};cpp外部コードはcountに直接触れません — increment()とget()を通す必要があります。
コンストラクタ#
コンストラクタはオブジェクト生成時に実行されます。クラス名と同じ名前で、戻り値の型はありません:
class Player {
public:
std::string name;
int level;
Player(std::string n, int l) : name(n), level(l) {}
};cppメンバ初期化リスト : name(n), level(l)がメンバを設定します。オブジェクト生成には引数が必要です:
Player p("Ada", 5);cppメソッド#
クラス内で宣言されたメンバ関数は、そのオブジェクトに対して動作します。末尾のconstはメソッドがオブジェクトを変更しないという約束です:
int getLevel() const { return level; }cpp実践的なカプセル化#
class BankAccount {
private:
double balance = 0;
public:
void deposit(double amount) {
if (amount > 0) balance += amount;
}
double getBalance() const { return balance; }
};cpp残高は外部から負の値に設定できません — クラス自身がデータを制御します。
結論#
これでC++入門シリーズは完結です: 最初のプログラム、変数と型、制御フロー、関数、ポインタと参照、そしてクラス。各概念で小さなプログラムを書き、学び続けてください — 標準ライブラリとSTLが次の自然なステップです。