c++ primer 习题 15

本文介绍了一个简单的图书销售系统中不同类型的图书折扣策略实现方法。通过基类`item_base`定义了基本属性和行为,并派生出`bulk_item`和`dls_item`两个子类来实现批量购买和动态区间折扣的功能。

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

#include <conio.h>

#include <iostream.h>

#include <string>

 

 

class item_base

{

      public:

             item_base(const std::string & book = "" ,double sale_price= 0.0):isbn(book),price(sale_price){}

             virtual ~item_base(){}

             std::string  book()const {return isbn;}

             virtual double net_price(std::size_t n){return n*price ;}

      protected:

             double price; 

      private:      

             std::string isbn;         

};

 

class bulk_item:public item_base

{

      public:      

              double net_price(std::size_t)const;

      private:

              std::size_t  min_number;

              double  discount;

};

 

double bulk_item::net_price(std::size_t number)const

{

      if(number>=min_number)

      {

           return number*discount;                   

      }                                 

      else 

      {

           return  number*price;    

      }                           

}

 

class dls_item : public item_base 

{

      public:      

              dls_item(const std::string & book = "",double sale_price = 0.0,int  min_num= 10,

              int max_num=100,double dis_count=0.2 ):item_base(book,sale_price),min_number(min_num),

              max_number(max_num),discount(dis_count){}

 

              double net_price(std::size_t)const;

      private:

              int min_number;

              int max_number;

              double discount;

};

double dls_item::net_price(std::size_t number) const

{

    if(number > max_number)

    {

        return (number-max_number)*price+max_number*(1-discount)*price;

    }   

    else if(number<=max_number && number>= min_number)

    {

         return number*(1-discount)*price;    

    }

    else

    {

        return number*price;    

    }

}

 

 

int main()

{

    item_base temp("hehh",12.0);

    getch();

    return 0;    

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值