引自免费微信小程序:皆我百晓生
首先,我们来定义图书类Book的结构,包括数据成员和成员函数声明。然后,我们将实现这些成员函数。这里需要注意的是,静态数据成员在类外定义,并且通过类名::静态变量名的方式来访问。
#include <iostream>
#include <string>
class Book {
protected:
std::string bookname;
double price;
size_t num;
public:
// 静态数据成员
static size_t total;
// 构造函数
Book(const std::string &_bookname, double _price, size_t _num);
// 拷贝构造函数
Book(const Book &book);
// 析构函数
~Book();
// 借书操作
void borrow(size_t bnum);
// 还书操作
void restore(size_t bnum);
// 获取图书价格 (const 成员函数)
double getPrice() const;
// 获取图书数量 (const 成员函数)
size_t getNum() const;
// 获取图书馆总存书数量 (静态成员函数)
static size_t getTotal();
// 显示图书信息 (const 成员函数)
void displayInfo() const;
};
// 静态数据成员的外部定义
size_t Book::total = 0;
接下来是类成员函数的实现部分:
// 构造函数
Book::Book(const std::string &_bookname, double _price, size_t _num) : bookname(_bookname), price(_price), num(_num) {
total += num; // 更新总存书数量
}
// 拷贝构造函数
Book::Book(const Book &book) : bookname(book.bookname), price(book.price), num(book.num) {
total += num; // 更新总存书数量
}
// 析构函数
Book::~Book() {
total -= num; // 当对象销毁时,减少总存书数量
}
// 借书操作
void Book::borrow(size_t bnum) {
if (bnum <= num) {
num -= bnum;
} else {
std::cout << "Not enough books available." << std::endl;
}
}
// 还书操作
void Book::restore(size_t bnum) {
if (bnum <= num) {
num += bnum;
} else {
std::cout << "Cannot restore more books than borrowed." << std::endl;
}
}
// 获取图书价格 (const 成员函数)
double Book::getPrice() const {
return price;
}
// 获取图书数量 (const 成员函数)
size_t Book::getNum() const {
return num;
}
// 获取图书馆总存书数量 (静态成员函数)
size_t Book::getTotal() {
return total;
}
// 显示图书信息 (const 成员函数)
void Book::displayInfo() const {
std::cout << "Book Name: " << bookname << std::endl;
std::cout << "Price: $" << price << std::endl;
std::cout << "Number of Books: " << num << std::endl;
}
这个类定义了一个图书对象,包含书名、价格、图书数量以及图书馆总存书数量。它提供了基本的借阅和归还图书操作,同时也允许获取图书的价格、数量以及整个图书馆的总存书数量。静态数据成员total
用于记录图书馆中的所有书籍总数。当创建新的Book对象时,会增加total
值,当Book对象被销毁时,会减去相应的值。