コンストラクタとデストラクタの基礎
CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 10/104。
コンストラクタは、オブジェクトが作成されるときに自動的に実行される特殊なメソッドです。デストラクタは、オブジェクトが破棄されるときに実行されます。
デフォルトコンストラクタ
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};引数付きコンストラクタ
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}コンストラクタのオーバーロード — 複数のコンストラクタ
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};デストラクタ — オブジェクトが破棄されるときに実行されます
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};異なるコンストラクタを使用したオブジェクトの作成
Book book1; // デフォルトコンストラクタ
Book book2("Harry Potter"); // 1つの引数
Book book3("1984", 328); // 2つの引数コンストラクタはクラスと同じ名前を持ち、戻り値の型はありません。デストラクタは ~ClassName() を使用し、オブジェクトがスコープ外になるときに、生成された順序とは逆の順序で自動的に呼び出されます。
チャレンジ
中級3つのオーバーロードされたコンストラクタとデストラクタを持つProductクラスを作成してください:
- 3引数コンストラクタ:name、price、stock
- 2引数コンストラクタ:name、price(stock = 0)
- デフォルトコンストラクタ:name = "Unknown"、price = 0、stock = 0
- デストラクタ:
"Destroying: <name>"を出力する
チートシート
コンストラクタは、オブジェクトが作成されたときに自動的に実行される特別なメソッドです。デストラクタは、オブジェクトが破棄されるときに実行されます。
デフォルトコンストラクタ — デフォルト値で初期化します:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};引数付きコンストラクタ — パラメータを受け取ります:
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}コンストラクタのオーバーロード — 異なるパラメータを持つ複数のコンストラクタ:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};デストラクタ — オブジェクトが破棄されるときに実行され、~ClassName() を使用します:
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};異なるコンストラクタを使用したオブジェクトの作成:
Book book1; // デフォルトコンストラクタ
Book book2("Harry Potter"); // 1つのパラメータ
Book book3("1984", 328); // 2つのパラメータコンストラクタはクラスと同じ名前を持ち、戻り値の型はありません。デストラクタは、オブジェクトがスコープ外になったときに、作成された順序とは逆の順序で自動的に呼び出されます。
自分で試してみよう
#include <iostream>
#include "Product.h"
int main() {
std::string name;
int price, stock;
std::getline(std::cin, name);
std::cin >> price >> stock;
Product product1(name, price, stock);
Product product2("Keyboard", 79);
Product product3;
std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
オブジェクト指向プログラミングのすべてのレッスン
3コンストラクタとデストラクタ
デフォルトコンストラクタ引数付きコンストラクタコピーコンストラクタムーブコンストラクタコンストラクタ初期化リスト委譲コンストラクタデストラクタ詳解Rule of Three / Five / Zeroまとめ - Stringクラス6演算子オーバーロード
演算子オーバーロード入門算術演算子のオーバーロード比較演算子のオーバーロードストリーム演算子代入演算子のオーバーロード[] と () 演算子のオーバーロード型変換演算子まとめ:Matrix クラス