句柄类帮助容器实现对因继承而相关联对象的存储

文中涉及的代码传送到此处下载

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;

在上述类定义的基础上&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值