?????????洢??????????????????????????????仯???????????????????????????????????????????????????????в?ε?????????????????????в?????????????????????????????????????????????仯??????????????????????????????????????????

??????????в?ε????????????????????????

????1??????κα???????????????????????????????Щ??????????в?ε???????????????????????????????

????2???????????????????λ???????μ?в?Σ?????????μ?в?Σ??????????????????????е????

????????????????Sale_item??????????????Item_base??Σ?Sales_item??????????????????????????????Sals_item????Item_base???????????*??—>?????????Item_base???????

???????磺Sale_item item(Bulk_item("0-102-34529"??35??4??43));

????item->net_price();//item????????????

??????????????????????????Sales_item??????????????????????Sales_item???????????ú??????????????????

????Sales_item????????????????????????????????Item_base??????????????????????ü?????Item_base?????????Item_base ????????Item_base ??????????????????????ü????????Sale_item??????????????????????

class Sales_item
{
public:
 Sales_item():p(0)??use(new size_t(1)){}
 Sales_item(const Item_base&);
 Sales_item(const Sales_item &i):p(i.p)??use(i.use)
 {
 ++*use;
 }
 ~Sales_item(){dec_use();};
 Sales_item& operator=(const Sales_item&);
 const Item_base *operator->()const{if(p) return p;}
 const Item_base&  operator*()const{if(p) return *p;}
private:
 Item_base *p;
 size_t *use;
 void dec_use()
 {if(--*use==0){delete p;delete use;}}

};
 


Sales_item& Sales_item::operator=(const Sales_item& i)
{
    ++*i.use;
 dec_use();
 p=i.p;
 use=i.use;
 return *this;


}
 


????????Item_base????????????????????????????????????????蹹????????????????????????????????Item_base???????????????????????????????????????????????????????????????????????????????????÷????????????????и???????????ò???clone

class Item_base
{
public:
 virtual Item_base* clone()const
 {
 return new Item_base(*this);
 }
};


class Bulk_item:public Item_base
{

public:
 Bulk_item* clont()const
 {
 return new Bulk_item(*this);
 }

};
 


Sales_item::Sales_item(const Item_base &item):p(item.clone())??use(new size_t(1)){}


???????????????????????????????????????ü????????????βε?clone?????????????鴟????????????Item_base??????????Item_base??clone???????????Bulk_item?????????????clone??????