1.第15章
1.原来使用虚函数是在基类和派生类都将一个函数头前面加上virtual,现在c++11新标准允许派生类显式地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后增加一个override关键字
2.基类通常应该定义析构函数为虚的
3.派生类不能直接访问基类的私有成员,但是可以访问受保护类成员
4.派生类构造函数要在基类构造函数完成之后创建完成,,因为要先构造基类的成员,才有派生类的成员
5.派生类必须将虚函数重新声明,对于普通版本成员函数派生类会直接继承
6.会继承基类的私有成员,但是不能访问它们
7.基类的指针或者引用绑定到派生类对象中的基类部分上,但是对于虚函数,会调用相应对象类型的版本
8.静态成员派生类和基类都可以调用
9.防止一个类被继承,可以在类名称后面加上final
练习15.3
hpp
class Quote
{
public:
Quote() = default;
Quote(const std::string &book, double sales_price) :bookNo(book), price(sales_price) {}
std::string isbn()const { return bookNo; }
virtual ~Quote() = default;
virtual double net_price(std::size_t n)const { return n * price; };
private:
std::string bookNo;
protected:
double price = 0.0;
};
class Bulk_quote :public Quote
{
public:
double net_price(std::size_t n)const override;
};
double print_total(std::ostream &os, const Quote&item, size_t n);
cpp
using namespace std;
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;
}