六一的部落格


关关难过关关过,前路漫漫亦灿灿。




纯虚函数

pure virtual

  1. 可以定义纯虚函数, 必须在类外
  2. 可以不定义纯虚函数, 声明时使用 =0 标记

    只能在类的内部使用 =0

Disc_quote的net_price为纯虚函数

 1class Disc_quote : public Quote
 2{
 3public:
 4    Disc_quote() = default;
 5    Disco_quote(const string &book, double price, size_t qty, double disc) : Quote(book, price), quantity(qty), discount(disc) {}
 6    double net_price(size_t) const = 0;
 7protected:
 8    size_t quantity = 0;
 9    double discount = 0.0;    
10};

抽象基类

abstract base class

  1. 含有纯虚函数的类
  2. 未经覆盖直接继承纯虚函数的类

不能(直接)创建一个抽象基类的对象: 如果派生类实现了纯虚函数, 派生类对象包含抽象基类部分, 视为间接创建


派生类构造函数只初始化它的直接基类

  1. 此例中, Bulk_quote的直接基类为Disc_quote, 间接基类为Quote
  2. 每个Bulk_quote对象包含3个子对象: 空的Bulk_quote部分, Disc_quote子对象和Quote子对象
1class Bulk_quote : public Disc_quote
2{
3public:
4    Bulk_quote() = default;
5    Bulk_quote(const string &book, double price, size_t qty, double disc) : Disc_quote(book, price, qty, disc) {}
6    // Bulk_quote调用Disc_quote, Disc_quote调用Quote
7    // 先初始化Quote子对象, 再初始化Disc_quote子对象, 最后运行Bulk_quote的构造函数
8    double net_price(size_t) const override;    
9};

在Quote的继承体系中增加Disc_quote类是重构 refactoring 的一个典型示例

重构负责重新设计类的体系, 将操作和数据从一个类移动到另一个类中

注意到, 虽然增加了Disc_quote, 使用了Bulk_quote和Quote的代码无需进行改动. 需要重新编译含有这些类的代码


抽象基类



纯虚函数

pure virtual

  1. 可以定义纯虚函数, 必须在类外
  2. 可以不定义纯虚函数, 声明时使用 =0 标记

    只能在类的内部使用 =0

Disc_quote的net_price为纯虚函数

 1class Disc_quote : public Quote
 2{
 3public:
 4    Disc_quote() = default;
 5    Disco_quote(const string &book, double price, size_t qty, double disc) : Quote(book, price), quantity(qty), discount(disc) {}
 6    double net_price(size_t) const = 0;
 7protected:
 8    size_t quantity = 0;
 9    double discount = 0.0;    
10};

抽象基类

abstract base class

  1. 含有纯虚函数的类
  2. 未经覆盖直接继承纯虚函数的类

不能(直接)创建一个抽象基类的对象: 如果派生类实现了纯虚函数, 派生类对象包含抽象基类部分, 视为间接创建


派生类构造函数只初始化它的直接基类

  1. 此例中, Bulk_quote的直接基类为Disc_quote, 间接基类为Quote
  2. 每个Bulk_quote对象包含3个子对象: 空的Bulk_quote部分, Disc_quote子对象和Quote子对象
1class Bulk_quote : public Disc_quote
2{
3public:
4    Bulk_quote() = default;
5    Bulk_quote(const string &book, double price, size_t qty, double disc) : Disc_quote(book, price, qty, disc) {}
6    // Bulk_quote调用Disc_quote, Disc_quote调用Quote
7    // 先初始化Quote子对象, 再初始化Disc_quote子对象, 最后运行Bulk_quote的构造函数
8    double net_price(size_t) const override;    
9};

在Quote的继承体系中增加Disc_quote类是重构 refactoring 的一个典型示例

重构负责重新设计类的体系, 将操作和数据从一个类移动到另一个类中

注意到, 虽然增加了Disc_quote, 使用了Bulk_quote和Quote的代码无需进行改动. 需要重新编译含有这些类的代码