您的位置:首页 > 其它

15.8节练习

2016-06-24 18:40 567 查看
练习15.28 定义一个存放Quote对象的vector,将Bulk_quote对象传入其中。计算vector中所有元素的net_price。

#include <iostream>
#include <vector>
#include "Quote.h"
using namespace std;
int main()
{
vector<Quote> Qvec;
Bulk_Quote b1("c++", 90, 5, 0.1);
Bulk_Quote b2("c", 50, 5, 0.1);
Qvec.push_back(b1);
Qvec.push_back(b2);
double sum = 0.0;
for (auto &i : Qvec) {
sum += i.net_price(10);
}
cout << sum << endl;
}
调用的是Quote中的net_price版本,不打折的。

15.29 再运行一次你的程序,这次传入Quote对象的shared_ptr。如果这次计算出的总额与之前的程序不一致,解释为什么,如果一致,也请说明理由。

#include <iostream>
#include <vector>
#include <memory>
#include "Quote.h"
using namespace std;
int main()
{
vector<shared_ptr<Quote>> basket;
auto p1 = make_shared<Bulk_Quote> ("c++", 90,5,0.1);
auto p2 = make_shared<Bulk_Quote>("c", 50, 5, 0.1);
basket.push_back(p1);
basket.push_back(p2);
double sum = 0.0;
for (auto &i : basket) {
sum += i->net_price(10);
}
cout << sum << endl;
}此次调用的是Bulk_quote中的net_price版本。

练习15.30 编写你自己的Baseket类,用它计算上一个练习中交易记录的总价格。

#include <iostream>
#include <memory>
#include <set>
#include "Quote.h"
using namespace std;
class Basket {
public:
double total_recepit(std::ostream &)const;
void add_item(const Quote &sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
void add_item(Quote &&sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
private:
static
bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs)
{
return lhs->isbn() < rhs->isbn();
}
std::multiset<shared_ptr<Quote>, decltype(compare)*> items{ compare };
};

double Basket::total_recepit(std::ostream &os)const
{
double sum = 0.0;
for (auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter)) {
sum += print_total(os, **iter, items.count(*iter));
}
os << "Total Sale: " << sum << endl;
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: