流萤k423 2024-04-15 18:20 采纳率: 80.5%
浏览 34
已结题

定义一个图书类Book

定义一个图书类Book
数据成员(访问权限定义为protected):

书名(char *bookname)、价格、图书数量(size_t num)、图书馆总存书数量(static size_t total)

成员函数(访问权限定义为public):

构造函数:对书名、价格和图书数量进行初始化

Book(char *_bookname, double _price, size_t _num);

注意:对静态数据成员如何处理?

拷贝构造函数:数据成员初始化(避免浅拷贝)

Book(const Book &book); 注意:对静态数据成员如何处理?

析构函数:释放系统资源

注意:对静态数据成员如何处理?

借书操作 void borrow(size_t bnum); 注意:对静态数据成员如何处理?

还书操作 void restore(size_t bnum); 注意:对静态数据成员如何处理?

获取图书价格(定义为const成员函数)

获取图书数量(定义为const成员函数)

获取图书馆总存书数量(定义为静态成员函数)

显示图书信息(定义为const成员函数)

要求:将类的定义与类成员函数的实现分开。

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-15 18:20
    关注

    引自免费微信小程序:皆我百晓生

    首先,我们来定义图书类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对象被销毁时,会减去相应的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题
  • ¥20 关于wordpress建站遇到的问题!(语言-php)(相关搜索:云服务器)
  • ¥15 【求职】怎么找到一个周围人素质都很高不会欺负他人,并且未来月薪能够达到一万以上(技术岗)的工作?希望可以收到写有具体,可靠,已经实践过了的路径的回答?
  • ¥15 Java+vue部署版本反编译
  • ¥100 对反编译和ai熟悉的开发者。
  • ¥15 带序列特征的多输出预测模型
  • ¥15 Python 如何安装 distutils模块
  • ¥15 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?