クラスとオブジェクト
CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 6/104。
クラスは構造を定義する設計図です。オブジェクトはその設計図から作成された特定のインスタンスです。
クラス(設計図)
class Car {
public:
std::string brand;
int year;
std::string getInfo() {
return brand + " (" + std::to_string(year) + ")";
}
};複数のオブジェクト(インスタンス)の作成
Car car1;
car1.brand = "Tesla";
car1.year = 2023;
Car car2;
car2.brand = "Honda";
car2.year = 2020;
std::cout << car1.getInfo() << std::endl; // Tesla (2023)
std::cout << car2.getInfo() << std::endl; // Honda (2020)各オブジェクトは独立しています。car1 を変更しても car2 には影響しません。同じクラスから複数のオブジェクトを作成でき、それぞれが独自のデータを保持します。
チャレンジ
中級Car クラス(設計図)を作成してください。プログラムはこのクラスから2つの個別のオブジェクト(インスタンス)を作成し、それぞれが独自のデータを保持します。
- パブリックメンバ:
brand(string),year(int) getInfo()—"<brand> (<year>)"を返します
チートシート
クラスは構造を定義する設計図です。オブジェクトは、その設計図から作成された特定のインスタンスです。
クラスの定義:
class Car {
public:
std::string brand;
int year;
std::string getInfo() {
return brand + " (" + std::to_string(year) + ")";
}
};クラスからオブジェクトを作成する:
Car car1;
car1.brand = "Tesla";
car1.year = 2023;
Car car2;
car2.brand = "Honda";
car2.year = 2020;
std::cout << car1.getInfo() << std::endl; // Tesla (2023)
std::cout << car2.getInfo() << std::endl; // Honda (2020)各オブジェクトは独立しており、独自のデータを保持します。1つのオブジェクトを変更しても、別のオブジェクトには影響しません。
自分で試してみよう
#include <iostream>
#include "Car.h"
int main() {
std::string brand1, brand2;
int year1, year2;
std::getline(std::cin, brand1);
std::cin >> year1;
std::cin.ignore();
std::getline(std::cin, brand2);
std::cin >> year2;
Car car1;
car1.brand = brand1;
car1.year = year1;
Car car2;
car2.brand = brand2;
car2.year = year2;
std::cout << "Car 1: " << car1.getInfo() << std::endl;
std::cout << "Car 2: " << car2.getInfo() << std::endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタ引数付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ詳解Rule of Three / Five / Zeroまとめ - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () 演算子のオーバーロード型変換演算子まとめ:Matrix クラス