练习15.2.1

练习 15.1:什么是虚成员?

在类中被声明为 virtual 的成员,基类希望这种成员在派生类中被重定义。除了构造函数外,任何非 static 成员都可以成为虚成员。

练习 15.2:protected 访问说明符与 private 有何区别?

protected 为受保护的访问标号,protected 成员可以被该类的成员、友元和派生类成员(非友元)访问,而不可以被该类型的普通用户访问。而 private 成员只能被基类的成员和友元访问,派生类不能访问。

练习 15.3:定义你自己的 Quote 类和 print_total 函数。

class Quote
{
public:
	Quote() = default;
	Quote(const 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:
	//书籍的ISBN编号
	string bookNo;
protected:
	//代表普通状态下不打折的价格
	double price = 0.0;
};
double print_total(ostream& os, const Quote& item, size_t n)
{
	//根据传入item形参的对象类型调用 Quote::net_price
	//或者 Bulk_quote::net_price
	double res = item.net_price(n);
	os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << endl;
	return ret;
}
posted @ 2020-06-13 12:14  CodeWithMe  阅读(102)  评论(0)    收藏  举报