c++ primer 习题 15章

本文介绍了一个基于C++实现的图书折扣策略系统。该系统通过继承和多态实现了不同类型的图书折扣,包括批量购买折扣和限量折扣等。文章展示了如何定义基类`item_base`以及派生类`bulk_item`和`lds_item`来具体实现各种折扣逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include <conio.h>

#include <iostream.h>

#include <string>

 

 

class item_base

{

      public:      

              item_base(const std::string & str="",double iprice=0.0)

              :isbn(str),price(iprice){}

              virtual  double net_price(std::size_t n)const

              {

                     return n*price;

              }

              virtual ~item_base(){}     

              std::string book()const

              {

                     return isbn;            

              }

      private:

              std::string isbn;              

      protected:

               double price;

};

 

class disc_item : public item_base

{

      public:

      disc_item(const std::string & str="",double iprice =0.0, std::size_t nquantity=0,double ndiscount =0 )

      :item_base(str,iprice),quantity(nquantity),discount(ndiscount){}      

      double net_price(std::size_t)const =0;

 

      std::pair<std::size_t , double>  discount_pollcy()const

      {

             return  std::make_pair(quantity,discount);                                    

      }

      private:

 

      protected:

                std::size_t quantity;

                double discount;

};

 

class bulk_item :public disc_item

{

      public:

      bulk_item(const std::string & str="",double iprice=0.0,

      std::size_t cnt =0,double discount= 0.0):disc_item(str,iprice,

      cnt,discount){}

      double net_price(std::size_t cnt)const

      {

             if(cnt>=discount)

             {

                 return cnt*(1-discount)*price;

             }

             else

                 return cnt*price;

      }

 

};

 

class lds_item:public disc_item

{

      public:

             double net_price(std::size_t cnt)const

             {

                    if(cnt<=quantity)

                    {

                         return cnt*(1-discount)*price;

                    }

                    else

                    {

                         return quantity*(1-discount)*price+ (cnt-quantity)*price;   

                    }

             }

      private:

 

      protected:      

};

 

 

int main(void)

{

 

    getch();

    return 0;        

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值