C++ クラスとオブジェクト: 初心者のガイド

こんにちは、将来のC++のマエストロ! あなたのこの素晴らしいC++クラスとオブジェクトの世界への旅のガイドとして、私はとても楽しみです。プログラミングを教えていることが多年的になり、私はあなたにこう言えます - このトピックはレゴブロックで建造を学ぶようなものです。一旦つかめば、素晴らしいものをすぐに作れるようになります!

C++ Classes & Objects

クラスとオブジェクトとは?

具体的な内容に飛び込む前に、シンプルな比喩から始めましょう。車を説明するとします。車には特定の特性(色、モデル、年式)があり、特定の動作(始動、停止、加速)を行うことができます。C++では、クラスはすべての車が持つべきプロパティとアクションを定義する車の設計図のようなものです。そして、オブジェクトはその設計図から作られた特定の車です。

では、コードで手を汚してみましょう!

C++ クラス定義

C++では、classキーワードを使用してクラスを定義します。以下は基本的な構造です:

class Car {
// クラスメンバーはここに入ります
};

でも、これはただの空のガレージです! 詳細を追加してみましょう:

class Car {
public:
string color;
string model;
int year;

void start() {
cout << "The car is starting!" << endl;
}

void stop() {
cout << "The car is stopping!" << endl;
}
};

これを分解してみましょう:

  1. Carという名前のクラスを定義しました。
  2. クラスの内部にデータメンバー(colormodelyear)とメンバー関数(start()stop())があります。
  3. publicキーワードは、これらのメンバーがクラスの外部からアクセス可能であることを意味します。

C++ オブジェクトの定義

設計図をお持ちできたので、実際の車を作りましょう! ここでオブジェクトが登場します:

int main() {
Car myCar;  // Carクラスのオブジェクトを作成
Car yourCar;  // 別のCarクラスのオブジェクト

return 0;
}

おめでとうございます! あなたは今、二台の車を「製造」したのです。 でもまだお互いにワイルドですね - いくつかの個性を与えましょう!

データメンバーへのアクセス

車のプロパティの値を設定したり取得するには、ドット(.)演算子を使用します:

int main() {
Car myCar;

// 値の設定
myCar.color = "Red";
myCar.model = "Sportster";
myCar.year = 2023;

// 値の取得
cout << "My car is a " << myCar.color << " " << myCar.model << " from " << myCar.year << endl;

// メンバー関数の呼び出し
myCar.start();
myCar.stop();

return 0;
}

出力:

My car is a Red Sportster from 2023
The car is starting!
The car is stopping!

どのようにmyCarオブジェクトと対話しているか見てみましょうか? 車の色、モデル、年を設定し、その値を出力し、最後にメンバー関数を呼び出しています。

クラスとオブジェクトの詳細

基本的な内容を理解したので、もう少し深く掘り下げましょう。C++のクラスには通常、二つの主要なセクションがあります:

  1. プライベートメンバー:これらはクラスの内部からのみアクセス可能です。
  2. パブリックメンバー:これらはクラスの外部からアクセス可能です。

以下は、私たちのCarクラスの改善版です:

class Car {
private:
string color;
string model;
int year;
bool isRunning;

public:
// コンストラクタ
Car(string c, string m, int y) {
color = c;
model = m;
year = y;
isRunning = false;
}

// ゲッターメソッド
string getColor() { return color; }
string getModel() { return model; }
int getYear() { return year; }

// 他のメソッド
void start() {
if (!isRunning) {
isRunning = true;
cout << "The " << color << " " << model << " is starting!" << endl;
} else {
cout << "The car is already running!" << endl;
}
}

void stop() {
if (isRunning) {
isRunning = false;
cout << "The " << color << " " << model << " is stopping!" << endl;
} else {
cout << "The car is already stopped!" << endl;
}
}
};

このバージョンでは、いくつかの新しいコンセプトが導入されています:

  1. プライベートメンバー:データメンバーをプライベートにして、より良い封印を行いました。
  2. コンストラクタ:この特別な関数は、オブジェクトが作成されたときに呼び出され、その値を初期化します。
  3. ゲッターメソッド:これらは、プライベートデータメンバーへの制御されたアクセスを提供します。
  4. 改善されたメソッドstart()stop()メソッドは、車の状態をチェックしてから動作します。

この改善されたクラスをどのように使用するかを見てみましょう:

int main() {
Car myCar("Red", "Sportster", 2023);

cout << "My car is a " << myCar.getColor() << " " << myCar.getModel()
<< " from " << myCar.getYear() << endl;

myCar.start();
myCar.start();  // 再度始動を試みる
myCar.stop();
myCar.stop();  // 再度停止を試みる

return 0;
}

出力:

My car is a Red Sportster from 2023
The Red Sportster is starting!
The car is already running!
The Red Sportster is stopping!
The car is already stopped!

素晴らしいでしょうか? 私たちの車は今、より本物の車のように動作します - もう運転中の場合は始動できず、停止中の場合は停止できません。

メソッド一覧表

以下は、私たちの改善されたCarクラスのメソッドをまとめた表です:

メソッド 説明
Car(string c, string m, int y) コンストラクタ:新しいCarオブジェクトを初期化
string getColor() 車の色を返す
string getModel() 車のモデルを返す
int getYear() 車の年式を返す
void start() 車がまだ運転していない場合に始動
void stop() 車が運転中の場合に停止

それでお終いです! あなたは初めてのC++クラスを作成し、そのクラスからオブジェクトを作成しました。 訓練は熟練の母であり、自分のクラスとオブジェクトで遊んでみることを恐れないでください。 Garageクラスを作成して、複数のCarオブジェクトを保存できるようにすることを試してみてはいかがでしょうか?

コーディングを続け、学び続け、そして最も重要なのは楽しんでください! あなたがC++クラスとオブジェクトの驚異を他の人に教える人になるまでには、もうすぐです。 次回まで、楽しいコーディングを!

Credits: Image by storyset