#include <iostream>
#include <string>
using namespace std;
using std::string;
class Item_base {
public:
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) { }
std::string book() const { return isbn; }
virtual double net_price(std::size_t n) const
{ return n * price; }
virtual ~Item_base() { }
private:
std::string isbn;
protected:
double price;
};
class Bulk_item : public Item_base {
public:
double net_price(std::size_t) const;
void memfcn(const Bulk_item &d, const Item_base &b);
private:
std::size_t min_qty;
double discount;
};
double Bulk_item::net_price(size_t cnt) const
{
if(cnt >= min_qty)
return cnt * (1 - discount) * price;
else
return cnt * price;
}
void Bulk_item::memfcn(const Bulk_item &d, const Item_base &b)
{
double ret = price;
ret = d.price;
}
int main()
{
Bulk_item bulk;
Item_base item(bulk); //ok
item = bulk; //ok
Item_base base;
Bulk_item *bulkP = &base; //error
Bulk_item &buklRef = base; //error
Bulk_item bulk = base; //error
Item_base *itemP = &bulk; // ok
Bulk_item *bulkP = itemP; //error
}