句柄类和继承 , 指针类的使用 C++ Primer xt_15_35

#include #include #include using namespace std;// 图书馆书的基类 不使用折扣策略的基类class Item_base{public:Item_base(const std::string &book = "", double sales_price = 0.0): isbn(book), price(sales_price){cout << std::string="" double="" sales_price="0.0)'" endl="" std::string="" book="" const="" return="" isbn="" virtual="" item_base="" clone="" const="" cout="" item_base="" item_base::clone="" const="" endl="" return="" new="" item_base="" virtual="" double="" net_price="" n="" const="" cout="" double="" item_base::net_price="" n="" const="" endl="" return="" n="" price="" virtual="" cout="" item_base::="" endl="" private:="" std::string="" isbn="" protected:="" double="" price="" class="" bulk_item="" :="" public="" item_base="" public:="" bulk_item="" std::string="" double="" price="0.0," size_t="" qty="0," double="" dis_rate="0.0)" :="" item_base="" price="" min_qty="" discount="" cout="" double="" price="0.0," size_t="" qty="0," double="" dis_rate="0.0)'" endl="" virtual="" double="" net_price="" cnt="" if="">= min_qty){return cnt * (1 - discount) * price;} else{//return cnt * price;return Item_base::net_price(cnt);}}virtual Bulk_item* clone() const{cout << bulk_item="" bulk_item::clone="" const="" endl="" return="" new="" bulk_item="" virtual="" cout="" bulk_item::="" endl="" private:="" size_t="" min_qty="" double="" discount="" class="" sales_item="" public:="" sales_item="" :="" p="" use="" std::size_t="" cout="" endl="" sales_item="" sales_item="" :="" p="" use="" item_base="" sales_item="" item_base="" :="" p="" use="" std::size_t="" cout="" endl="" decr_use="" const="" item_base="" operator="" const="" if="" p="" return="" else="" throw="" logic_error="" const="" item_base="" operator-="">() const{if (NULL != p){return p;}else{throw logic_error("内存访问非法啊!");}}Sales_item& operator=(const Sales_item &rhs){++*rhs.use; // 右操作数, 引用计数 + 1decr_use();p = rhs.p;use = rhs.use;return *this;}private:// 释放内存的工具函数void decr_use(){if (--*use == 0){delete p;delete use;}}private:Item_base *p; // 指向一个 共享对象std::size_t *use; // 指向一个 共享引用计数};// 比较函数类型// typedef bool (*Comp)(const Sales_item &lhs, const Sales_item &rhs);inline bool compare(const Sales_item &lhs, const Sales_item &rhs){return lhs/*.operator->()*/->book() < rhs/*.operator->()*/->book();}class Basket{// 比较函数类型, private权限typedef bool (*Comp)(const Sales_item &lhs, const Sales_item &rhs);public:typedef std::multiset set_type;typedef set_type::size_type size_type;typedef set_type::const_iterator const_iter;Basket() : items(compare) { cout << endl="" void="" add_item="" sales_item="" items="" size_type="" size="" sales_item="" const="" return="" items="" double="" total="" double="" sum="0.0;" for="" iter="items.begin();" iter="" items="" iter="items.upper_bound(*iter))" sum="">net_price(items.count(*iter));}return sum;}private:std::multiset items;};int main(int argc, char *argv[]){return 0;}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值