句柄的使用~接上边句柄定义--《C++ primer》笔记

坐火车了,不学了,今天的绝笔。。。。。。

====================================================================================================================================


接上边,因为容器管理对象太麻烦,存基类和派生类都不好,指针不好管理,所以要用handle类来管理,BTW:程序里用购物篮(shopping)basket,不叫购物车,不过ebay上购物车是cart,

关于比较:

review: operator<  and operator== 两者的冲突~小于只是isbn相同,euqal却要求所有成员相同,会产生歧义

review:默认实参和函数重载也有点微妙的关系,有时候还有那么点像,不过有默认实参的时候,实参必须要严格遵守顺序,比如第一个只能是isbn,当然,重载就高级了,第一个是price也无所谓。


现在要使用的方法就是:定义容器的时候可以比较器一块弄进去

std::multiset<Sales_item, Comp> items(compare);

这个类里边的

typedef bool (*Comp)(const Sales_item&, const Sales_item&);
困惑一: 这里边的typedef,后边没跟东西,新名字是什么?

困惑二,直接用这个compare定义也匹配不上

review一下函数指针吧

inline bool compare(const Sales_item& lhs, const Sales_item& rhs){
return lhs->book() < rhs->book();
} 
附加疑问,这个book()函数,直接要求是Item_base成员。(因为自定义操作符Item_base* operator->)

定义一个Basket类

class Basket {
    //type of the comparison function used to order the multiset
    typedef bool (*Comp)(const Sales_item&, const Sales_item&);//这个比较器是自己调用才有效,还是容器自己也用他排序?还有这个typedef成什么了
public:
    //make it easier to type the type of our set
    typedef std::multiset<Sales_item, Comp> set_type;
    //typedefs modeled after corresponding container types
    typedef set_type::size_type size_type;
    typedef set_type::const_iterator const_iter;
    Basket() : items(compare) { }                //initialze the comparator
    void add_item(const Sales_item &item){
                                items.insert(item); }
    size_type size(const Sales_item &i) const {    //item_count功能
                        return items.count(i); }
    double total() const;                        //sum of net prices for all items in the basket
private:
    std::multiset<Sales_item, Comp> items;
};

double Basket::total() const {
    double sum = 0.0;
    for(const_iter iter = items.begin();iter != iterm.end();iter = items.upper_bound(*iter)){
        sum += (*iter) -> net_price(items.count(*iter));
    }    
    return sum;
}


to be continued ...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值