1. 纯虚函数pure virtual
纯虚函数无需定义,通过在函数体的位置书写 =0 就可以将一个虚函数说明为纯虚函数。
- 其中 =0 只能出现在类内部的虚函数声明语句中。
- 可以为一个纯虚函数提供定义,不过函数体必须定义在类的外部,也就是说,不能在类的内部为一个 =0 的函数提供函数体。
2. 抽象基类abstract base class
含有或者未经覆盖直接继承纯虚函数的类是抽象基类,抽象基类负责定义接口,而后续的其他类可以覆盖接口。
class Disc_quote :public Quote
{
public:
Disc_quote() = default;
Disc_quote(const std::string& book,double price,std::size_t qty,double disc):
quantity(qty),discount(disc)
double net_price(std::size_t) const= 0;
protected:
std::size_t quantity = 0;
double discount = 0.0;
};
class Bulk_quote : public Disc_quote
{
public:
Bulk_quote() = default;
Bulk_quote(const std::string& book,double price,std::size_t qty,double disc):
Disc_quote(book,price,qty,disc){}
double net_price(std::size_t)const override;
};
- 不能直接创建一个抽象基类的对象。