#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;
}