Menu
Coddy logo textTech

コンストラクタとデストラクタの基礎

CoddyのC++ジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 10/104。

constructor は、オブジェクトが作成されたときに自動的に実行される特別なメソッドです。destructor は、オブジェクトが destroyed されたときに実行されます。

Default constructor

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つのパラメータ

コンストラクターは戻り値の型を持たず、class と同じ名前を持ちます。デストラクターは ~ClassName() を使用し、オブジェクトがスコープ外に出ると、生成された順序とは逆の順序で自動的に呼び出されます。

challenge icon

チャレンジ

中級

Product classを、3つのオーバーロードされたconstructorとdestructorとともに作成します:

  • 3-parameter constructor: name、price、stock
  • 2-parameter constructor: name、price(stock = 0)
  • Default constructor: name = "Unknown"、price = 0、stock = 0
  • destructor: "Destroying: <name>"を出力します

自分で試してみよう

#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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: C++オンラインコンパイラ