C++继承练习4

2016-12-08  本文已影响4人  科学旅行者

参考资料:《C++ Primer习题集(第5版)》

目的:练习虚函数的构造。
Quote: 基类,提供基本的购书规则。
Bulk_quote: 派生类,提供不同的购书规则。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

class Quote {
    public:
        Quote() = default;//默认构造函数;
        Quote(const string &book, double sales_price) : bookNo(book), price(sales_price) {}//初始化构造器;
        string isbn() const {
            return bookNo;//返回书籍的ISBN号;//只是返回, 可以加const;
        }
        virtual double net_price(size_t n) const {
            return n * price;//返回给定数量的书籍的销售总额, 派生类改写并使用不同的折扣计算方法;
        }
        virtual void debug() {//测试;
            cout << "bookNo = " << bookNo << " price = " << price << endl;
        }
        ~Quote() = default;//对析构函数进行动态绑定;
        //作为基类使用的类应该具有虚析构函数, 以保证在删除指向动态分配对象的基类指针时, 根据指针实际指向的对象所属的类型运行适当的析构函数;
    private:
        string bookNo;//书籍的ISBN编号;
    protected:
        double price = 0.0;//代表普通状态下不打折的价格;
};

class Bulk_quote : public Quote {
    public:
        Bulk_quote(const string &book = "", double sales_price = 0, size_t qty = 0, double disc_rate = 0) ://默认参数;
            Quote(book, sales_price), min_qty(qty), discount(disc_rate) {}//使用基类构造函数初始化派生类继承基类的成员变量;
        double net_price(size_t cnt) const override {//显示声明继承;
            if (cnt >= min_qty) {
                return cnt * (1 - discount) * price;
            }
            else return cnt * price;
        } 
        void debug() override {
            Quote::debug();//bookNo变量为private, 所以不能直接访问bookNo, 只能调用基类的debug()函数来显示;
            cout << "min_qty = " << min_qty << " discount = " << discount << endl;
        }
    private:
        size_t min_qty;//最少折扣所需数量;
        double discount;//折扣;   
}; 

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    Bulk_quote b("1111-999-90-99-9", 20.0, 12, 0.2);
    Quote *p = &b;//动态绑定;
    p -> debug();
    int cnt = 20;//购买20本书;
    double costs = p -> net_price(cnt);//所花费的数目;
    cout << costs << endl;
    return 0;
}
/*
bookNo = 1111-999-90-99-9 price = 20
min_qty = 12 discount = 0.2
320
*/
上一篇 下一篇

猜你喜欢

热点阅读