栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C++ Primer】 第十五章 面向对象程序设计 Basket 类

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C++ Primer】 第十五章 面向对象程序设计 Basket 类

Basket.cpp

#include 
#include 
#include 
#include 
#include 
#include 

class Quote{
public:
    Quote() = default;
    Quote(const std::string &book, double sales_price) :
        bookNo(book),price(sales_price){}
    std::string isbn() const {
        return bookNo;
    }
    virtual double net_price(std::size_t n) const {
        return n * price;
    } 
    virtual Quote* clone() const & { return new Quote(*this);} 
    virtual Quote* clone() && { return new Quote(std::move(*this));}
    virtual ~Quote() = default;
private:
    std::string bookNo;
protected:
    double price = 0.0;
};

class Bulk_quote:public Quote {
public: 
    Bulk_quote() = default;
    Bulk_quote(const std::string &, double, std::size_t, double) ;
    double net_price(std::size_t) const override;
    Bulk_quote* clone() const & { return new Bulk_quote(*this); }
    Bulk_quote* clone() && { return new Bulk_quote(std::move(*this)); }
private:
    std::size_t min_qty = 0;
    double discout = 0.0;
};

class Basket { 
public: 
    //Basket使用合成的默认构造函数和拷贝控制成员 
    void add_item(const Quote &sale) { 
        items.insert(std::shared_ptr(sale.clone()));
    }
    void add_item(Quote && sale) { 
        items.insert(std::shared_ptr(std::move(sale).clone()));
    }
    //打印每本书的总价和购物篮中所有书的总价 
    void total_receipt(std::ostream&) const;
private: //该函数用于比较shared_ptr,multiset成员会用到它 
    static bool Mycompare(const std::shared_ptr &lhs, const std::shared_ptr &rhs) {
        return lhs->isbn() < rhs->isbn();
    }
    //multiset保存多个报价,按照compare成员排序 
    std::multiset,decltype(Mycompare)*> 
    items{Mycompare};
};

double print1_total(std::ostream &os, const Quote &item, std::size_t n) {
    double ret = item.net_price(n);
    os << "ISBN" << item.isbn() << "#sold : " << n << "total due:" << ret << std::endl;
    return ret;
}

double Bulk_quote::net_price(std::size_t cnt) const {
    if(cnt >= min_qty) {
        return cnt * (1 -discout) * price;
    } else {
        return cnt * price;
    }
}

void Basket::total_receipt(std::ostream &os) const {
    double sum = 0.0;
    for(auto iter = items.cbegin(); iter != items.cend();
                iter = items.upper_bound(*iter)) {
                    sum += print1_total(os,**iter,items.count(*iter));
    }
    os << "Total Sale:" << sum << std::endl;
//    return sum;
}


int main () {
    // std::vector<
    Basket bsk;
    Quote a("123", 45);
    Bulk_quote b("345", 45, 3, .15);
    bsk.add_item(a);
    bsk.add_item(b);
    // bsk.total_receipt(std::cout);
    return 0;
}
暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1015020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号