构造函数与析构函数基础
本课属于 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(),当对象超出作用域时,会按照创建顺序的相反顺序自动调用。
挑战
中等创建一个包含三个重载构造函数和一个析构函数的 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;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C++ 在线编译器