モジュールのレッスン (2/2)
コンストラクターとデストラクター
コンストラクターとデストラクターは、オブジェクトのライフサイクル、つまりオブジェクトの作成 (初期化) と破棄 (リソースのクリーンアップ) を管理する特別なメンバー関数です。
コンストラクター
コンストラクターは、クラスのオブジェクトがメモリ内に作成されるときに自動的に呼び出されます。
- クラスと 同じ名前 が付いています。
- 戻り値の型がありません (
voidさえありません)。 - さまざまなパラメータのセットを受け入れるようにオーバーロードできます。
#include <iostream>
#include <string>
class Item {
private:
std::string name;
double price;
public:
// Parameterized constructor
Item(std::string itemName, double itemPrice) {
name = itemName;
price = itemPrice;
std::cout << "Object " << name << " created." << std::endl;
}
void display() {
std::cout << name << ": " << price << " EUR" << std::endl;
}
};
int main() {
// Implicit call to the constructor passing parameters
Item book("Libro C++", 29.99);
book.display();
return 0;
}デフォルトのコンストラクター
コンストラクターを定義しない場合、C++ コンパイラーはパラメーターのないデフォルトのコンストラクターを生成します。ただし、パラメーターを使用してカスタム コンストラクターを作成した場合、コンパイラーはデフォルトのコンストラクターを自動的に生成しなくなるため、必要に応じて明示的に定義する必要があります。
class Point {
public:
int x;
int y;
// Explicit default constructor
Point() {
x = 0;
y = 0;
}
};デストラクター
デストラクターは、オブジェクトがスコープ外に出るか、メモリから明示的に削除されると、自動的に呼び出されます。
- クラスと同じ名前で、先頭にチルダ
~が付きます (例:~Item())。 - パラメータを受け入れず、戻り値の型もありません。
- リソースを解放するために使用されます (ファイルを閉じる、動的に割り当てられたメモリを解放するなど)。
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};自分で試してみてください
User という名前のクラスをプライベート メンバー std::string ユーザー名で定義します。文字列 (User(std::string name)) を受け入れ、それを使用してユーザー名の初期化を行うパブリック コンストラクターを追加します。ユーザー名を返すパブリックゲッター std::string getUsername() を追加します。 main では、名前として「Alice」を渡す User オブジェクトを作成し、std::cout を使用してそのユーザー名を出力します。
ヒントを表示
コンストラクターはクラスと同じ名前を持ち、「void」さえも含め、戻り値の型を指定しません。
3 回の試行後に解決策が利用可能になります
2 つのパブリック整数メンバー x と y を含む Point という名前のクラスを定義します。 x と y を 0 に初期化するデフォルトのコンストラクター (パラメーターなし) を追加します。 main では、デフォルトのコンストラクターを使用して Point オブジェクトを作成し、x と y を出力します。
ヒントを表示
デフォルトのコンストラクターは引数を取りません。 `Point() { x = 0; y = 0; }`。
3 回の試行後に解決策が利用可能になります