题目:假设图书馆里有许多书籍,每本书有书名、作者、出版社和出版日期等信息。我们可以通过该程序来实现对图书馆的管理。首先,定义一个Book类,用于表示一本书。类中需要包含书名、作者、出版社和出版日期等属性,并定义构造函数和析构函数以及其他必要的函数。接下来,定义一个Library类,用于管理图书馆的书籍。类中需要定义一个存储书籍的数组,以及对这个数组进行增加、删除、查找等操作的函数。最后,定义一个主函数,创建一个图书馆对象,并通过调用其函数,实现对图书馆中书籍的管理。
疑惑是:在查找书籍时定义的函数为什么是Book* findBook(string title) ?不理解为什么是Book*类型。还有,删除书籍和添加书籍函数并没有在函数名称或者参数列表指明它们是类的成员函数隐式地生成实现。那么在明知类外定义的删除书籍和添加书籍函数不是成员函数的情况下,为什么还能使用私有成员变量?参数中没有this指针,也没有通过引用传递类的对象。
#include <iostream>
using namespace std;
// Book 类定义
class Book {
private:
string title;
string author;
string publisher;
string publishDate;
public:
// 构造函数
Book(string title, string author, string publisher, string publishDate) {
this->title = title;
this->author = author;
this->publisher = publisher;
this->publishDate = publishDate;
}
// 析构函数
~Book() {}
// 获取书名
string getTitle() {
return title;
}
// 获取作者
string getAuthor() {
return author;
}
// 获取出版社
string getPublisher() {
return publisher;
}
// 获取出版日期
string getPublishDate() {
return publishDate;
}
};
// Library 类定义
class Library {
private:
Book* books[100]; // 存储书籍的数组
int bookCount; // 书籍数量
public:
// 构造函数
Library() {
bookCount = 0;
for (int i = 0; i < 100; i++) {
books[i] = NULL;
}
}
// 析构函数
~Library() {
for (int i = 0; i < bookCount; i++) {
delete books[i];
}
}
// 添加书籍
void addBook(Book* book) {
books[bookCount++] = book;
}
// 删除书籍
void removeBook(string title) {
for (int i = 0; i < bookCount; i++) {
if (books[i]->getTitle() == title) {
delete books[i];
for (int j = i; j < bookCount - 1; j++) {
books[j] = books[j + 1];
}
bookCount--;
break;
}
}
}
// 查找书籍
Book* findBook(string title) {
for (int i = 0; i < bookCount; i++) {
if (books[i]->getTitle() == title) {
return books[i];
}
}
return NULL;
}
// 显示所有书籍
void showBooks() {
for (int i = 0; i < bookCount; i++) {
cout << "书名:" << books[i]->getTitle() << endl;
cout << "作者:" << books[i]->getAuthor() << endl;
cout << "出版社:" << books[i]->getPublisher() << endl;
cout << "出版日期:" << books[i]->getPublishDate() << endl;
cout << "---------------------" << endl;
}
}
};
// 主函数
int main() {
Library library; // 创建图书馆对象
// 添加一些书籍
Book* book1 = new Book("《三国演义》", "罗贯中", "人民文学出版社", "1973 年");
Book* book2 = new Book("《红楼梦》", "曹雪芹", "中华书局", "1982 年");
Book* book3 = new Book("《西游记》", "吴承恩", "上海古籍出版社", "1995 年");
library.addBook(book1);
library.addBook(book2);
library.addBook(book3);
// 显示所有书籍
library.showBooks();
// 删除一本书
library.removeBook("《红楼梦》");
// 显示所有书籍
library.showBooks();
// 查找一本书
Book* foundBook = library.findBook("《三国演义》");
if (foundBook!= NULL) {
cout << "找到书籍:" << foundBook->getTitle() << endl;
} else {
cout << "未找到书籍" << endl;
}
return 0;
}