Menu
CoddyTech

构造函数与析构函数基础

本课属于 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");         // 一个参数
Book book3("1984", 328);            // 两个参数

构造函数的名称与类相同,且没有返回类型。析构函数使用 ~ClassName(),当对象超出作用域时,会按照创建顺序的相反顺序自动调用。

challenge icon

挑战

中等

创建一个包含三个重载构造函数和一个析构函数的 Product 类:

  • 3 个参数的构造函数:名称、价格、库存
  • 2 个参数的构造函数:名称、价格(库存 = 0)
  • 默认构造函数:名称 = "Unknown",价格 = 0,库存 = 0
  • 析构函数:输出 "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++ 在线编译器