Menu
CoddyTech

Cơ bản về hàm khởi tạo và hàm hủy

Thuộc phần Lập trình hướng đối tượng trong hành trình C++ của Coddy. Bài học 10 trên 104.

Hàm khởi tạo (constructor) là một phương thức (method) đặc biệt, tự động chạy khi một đối tượng (object) được tạo. Hàm hủy (destructor) chạy khi đối tượng bị hủy.

Hàm khởi tạo mặc định

class Book {
private:
    std::string title;
    int pages;

public:
    Book() {
        this->title = "Unknown";
        this->pages = 0;
    }
};

Hàm khởi tạo có tham số

Book(std::string title, int pages) {
    this->title = title;
    this->pages = pages;
}

Nạp chồng hàm khởi tạo: nhiều hàm khởi tạo

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;
    }
};

Hàm hủy: chạy khi đối tượng bị hủy

class Book {
public:
    ~Book() {
        std::cout << "Book destroyed" << std::endl;
    }
};

Tạo đối tượng bằng các hàm khởi tạo khác nhau

Book book1;                        // Hàm khởi tạo mặc định
Book book2("Harry Potter");         // Một tham số
Book book3("1984", 328);            // Hai tham số

Hàm khởi tạo có cùng tên với lớp và không có kiểu trả về. Hàm hủy dùng ~ClassName() và được gọi tự động theo thứ tự ngược lại với thứ tự tạo khi các đối tượng ra khỏi phạm vi.

challenge icon

Thử thách

Trung bình

Tạo lớp Product với ba hàm khởi tạo nạp chồng và một hàm hủy:

  • Hàm khởi tạo có 3 tham số: tên, giá, số lượng tồn kho
  • Hàm khởi tạo có 2 tham số: tên, giá (stock = 0)
  • Hàm khởi tạo mặc định: name = "Unknown", price = 0, stock = 0
  • Hàm hủy: in ra "Destroying: <name>"

Tự làm thử

#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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch C++ online