vaghxc 2024-04-29 15:43 采纳率: 88.2%
浏览 1
已结题

求答疑c++图书馆问题

题目:假设图书馆里有许多书籍,每本书有书名、作者、出版社和出版日期等信息。我们可以通过该程序来实现对图书馆的管理。首先,定义一个Book类,用于表示一本书。类中需要包含书名、作者、出版社和出版日期等属性,并定义构造函数和析构函数以及其他必要的函数。接下来,定义一个Library类,用于管理图书馆的书籍。类中需要定义一个存储书籍的数组,以及对这个数组进行增加、删除、查找等操作的函数。最后,定义一个主函数,创建一个图书馆对象,并通过调用其函数,实现对图书馆中书籍的管理。
疑惑是为什么析构Library时要用循环?怎么理解这个循环?是删除书籍所在空间的意思吗?和删除书籍不一样对吗


 
#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;
}
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-04-29 15:43
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    addBook(book3); // 将书籍添加到图书馆中 // 查找一本书籍 Book* foundBook = library.findBook("《红楼梦》"); if (foundBook != NULL) { cout << "找到了书籍:《红楼梦》" << endl; } else { cout << "没有找到书籍:《红楼梦》" << endl; } // 删除一本书籍 library.removeBook("《三国演义》"); // 显示所有书籍 library.showBooks(); // 释放内存 delete book1; delete book2; delete book3; return 0; } 解答:
    1. 为什么析构Library时要用循环? 在Library类中,有一个存储书籍的数组books,该数组中存储的是Book对象指针。在Library对象被销毁时,需要先遍历books数组,依次释放数组中的每个Book对象所占用的内存空间,再释放books数组所占用的内存空间。 因此,需要使用循环语句来遍历books数组,并调用delete来释放每个Book对象的内存空间。
    2. 怎么理解这个循环?是删除书籍所在空间的意思吗?和删除书籍不一样对吗? 这个循环的作用是遍历books数组,依次释放数组中的每个Book对象所占用的内存空间。 在删除书籍时,是根据书籍的标题来查找并删除该书籍,而不是直接删除其所在空间。因为在Library对象中存储的是每本书的指针,而不是书本身,所以需要通过Book对象的指针来访问Book对象,并删除对象所占用的内存空间。同时,在删除书籍时,还需要将其从books数组中移除,以保证books数组中只保存还未删除的Book对象指针。 例子代码:
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月7日
  • 已采纳回答 4月29日
  • 创建了问题 4月29日

悬赏问题

  • ¥100 求懂行的大ge给小di解答下!
  • ¥15 pcl运行在qt msvc2019环境运行效率低于visual studio 2019
  • ¥15 MAUI,Zxing扫码,华为手机没反应。可提高悬赏
  • ¥15 python运行报错 ModuleNotFoundError: No module named 'torch'
  • ¥100 华为手机私有App后台保活
  • ¥15 sqlserver中加密的密码字段查询问题
  • ¥20 有谁能看看我coe文件到底哪儿有问题吗?
  • ¥20 我的这个coe文件到底哪儿出问题了
  • ¥15 matlab使用自定义函数时一直报错输入参数过多
  • ¥15 设计一个温度闭环控制系统