第十五章课后习题答案(差15.31-15.42)

//15.1
在类中被声明为virtual的成员,基类希望这种成员能被派生类重定义
除了构造函数外,所有非static成员都可以是虚成员
//15.2
基类希望派生类有权访问而禁止其他用户访问的成员定义为protected
private只能被基类的成员和友元访问,派生类也不能访问
//15.3
class Quote
{
   
public:
	Quote()=default;
	Quote(string &book, double sales_price) : bookNo(book), price(sales_price) {
   }
	string isbn() const {
    return bookNo; }
	virtual double net_price(size_t n) const {
    return n * price; }
	virtual ~Quote()=default;
private:
	string bookNo;
protected:
	double price = 0.0;
};
double print_total(ostream &os, const Quote &item, size_t n)
{
   
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << "# sold: " << n << " total due: " << ret << endl;
	return ret;
}
//15.4
(a)不能继承自己
(b)正确
(c)声明类时不应包含派生列表
//15.5
class Bulk_Quote : public Quote
{
   
public:
	Bulk_Quote() = default;
	Bulk_Quote(const string &book, double sales_price, size_t mq, double disc)
		: Quote(book, sales_price), min_qty(mq), discount(disc) {
   }
	double net_price(size_t cnt) const override
	{
   
		if (cnt >= min_qty)
			return cnt * (1 - discount) * price;
		else
			return cnt * price;
	}
private:
	size_t min_qty;
	double discount;
};
//15.7
class Limited_Quote : public Quote
{
   
public:
	Limited_Quote() = default;
	Limited_Quote(const string &book, double sales_price, size_t cnt, double dis) : Quote(book, sales_price), min_qty(cnt), discount(dis) {
   }
	double net_price(size_t n) const override
	{
   
		if (n <= min_qty)
			return n * (1 - discount) * price;
		else
			return min_qty * (1 - discount) * price + (n - min_qty) * price;
	}
private:
	size_t min_qty;
	double discount;
};
//15.8
静态类型在编译时已知,它是变量声明时的类型
动态类型只有运行时才知道,是变量表示的内存中的对象的类型
//15.9l
Bulk_Quote bulk;
double print_total(..., const Quote &item, ...);
Quote *pQuote = &bulk;
Quote &rQuote = bulk;
print_total(..., bulk, ...);
//15.10
在要求基类的地方使用了派生类,是静态类型和动态类型不同的典型例子
//15.11
class Quote
{
   
publ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值