15.8節練習

2256 ワード

練習15.28 Quoteオブジェクトを格納するvectorを定義し、Bulk_quoteオブジェクトが入力されます.vector内のすべての要素のnet_を計算するprice.
#include 
#include 
#include "Quote.h"
using namespace std;
int main()
{
	vector 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 
#include 
#include 
#include "Quote.h"
using namespace std;
int main()
{
	vector> basket;
	auto p1 = make_shared ("c++", 90,5,0.1);
	auto p2 = make_shared("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 
#include 
#include 
#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(sale.clone())); }
	void add_item(Quote &&sale) { items.insert(std::shared_ptr(sale.clone())); }
private:
	static
	bool compare(const std::shared_ptr &lhs, const std::shared_ptr &rhs)
	{
		return lhs->isbn() < rhs->isbn();
	}
	std::multiset, 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;
}