15.8節練習
2256 ワード
練習15.28 Quoteオブジェクトを格納するvectorを定義し、Bulk_quoteオブジェクトが入力されます.vector内のすべての要素のnet_を計算するprice.
呼び出されたのはQuoteのnet_ですpriceバージョン、割引はありません.
15.29もう一度プログラムを実行して、今度Quoteオブジェクトのshared_に転送します.ptr.今回算出した総額がこれまでのプログラムと一致しない場合は、なぜ、一致すれば、理由も説明してください.
練習15.30自分のBaseketクラスを作成し、前の練習で取引記録の総価格を計算します.
#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;
}