派生类的例子

15.7定义一个类使其实现一种数量受限的折扣策略,具体策略是:当购买书籍的数量不超过一个给定的限量时享受折扣,如果购买量一旦超过了限量,则超出的部分将以原价销售。

Quote.h

#ifndef QUOTE_H
#define QUOTE_H
#include<iostream>
#include<string>
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;}
    virtual double net_price(size_t n) const
    { return n*price;}
    virtual ~Quote()=default;
private:
    string bookNo;
protected:
    double price=0.0;
};
class Bulk_quote:public Quote
{
public:
    Bulk_quote()=default;
    Bulk_quote(const string &, double , size_t , double );
    double net_price(size_t) const override;
private:
    size_t min_qty=0;
    double discount=0.0;
};
#endif // QUOTE_H

Quote.cpp

#include"Quote.h"
Bulk_quote::Bulk_quote(const string &book, double p, size_t qty, double disc):Quote(book,p),min_qty(qty),discount(disc) {}

double Bulk_quote::net_price(size_t cnt) const
{
    if(cnt<=min_qty)
        return cnt*(1-discount)*price;
    else
        return (cnt-min_qty)*price+min_qty*(1-discount)*price;
}

main.cpp

#include <iostream>
#include"Quote.h"
using namespace std;

double print_total(ostream &os,const Quote &item,size_t n)
{
    double ret=item.net_price(n);
    os<<"ISBN: "<<item.isbn()<<" # sold: "<<n<<" total due: "<<ret<<endl;
    return ret;
}
int main()
{
    Quote quote("Base",2);
    Bulk_quote bulk("devired",2,5,0.5);
    print_total(cout,quote,6);
    print_total(cout,bulk,6);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值