文中涉及的代码传送到此处下载
1.问题描述:
一家综合性的网上书城出售的书籍种类很多,商家为了能够获得更多的利润,对不同的书籍进行不同程度的降价促销,比如对小说类的书籍进行0.5折的优惠,对计算机类的书籍进行0.7折的优惠。现在有一个用户同时选购了很多书籍,其中有几本是小说,几本是计算机类书籍,还有一些是按原价出售的书籍,从程序实现的角度来考虑,我们应该怎么得到这些书籍的总价呢
为了更清晰的阐述句柄类在这个问题中的应用,我们会对这个问题进行很大程度的简化。从面向对象的角度来说这里需要用到类的继承的思想,首先需要一个Base_class来保存这些书籍共有的特征和公共的操作,比如:书籍的ISBN号,定价,返回书本售价的函数,返回书本ISBN的函数。针对每一类不同的书籍都需要一个Derived_class,它还需要记录针对这一类书籍的折扣力度,以及返回该类书籍打折后价格的函数。
对基类和派生类的定义如下:
books.h文件内容
#include <iostream>
#include <string>
#include <set>
using namespace std;
class Book_base
{
public:
Book_base(const string& book="", double sales_price=0):
isbn(book),price(sales_price){};
string get_isbn() const
{
return isbn;
}
virtual double net_price(int book_count)
{
return price*book_count;
}
virtual ~Book_base(){}
private:
string isbn;
protected:
double price;
};
class Book_detail: public Book_base
{
public:
double net_price(size_t count) const;
private:
size_t min_qty;
double discount;
};
books.cpp文件内容
#include "books.h"
using namespace std;
double Book_detail::net_price(size_t count) const
{
if(count>=min_qty)
return count*price*discount;
else
return count*price;
在上述类定义的基础上&#