Menu
Coddy logo textTech

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

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() を使用し、オブジェクトがスコープ外になるときに、生成された順序とは逆の順序で自動的に呼び出されます。

challenge icon

チャレンジ

中級

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

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

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