练习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;
}

浙公网安备 33010602011771号