C++ Primer 学习笔记_70_面向对象编程 --纯虚函数、容器与继承(一)

2014-11-24 12:52:56 · 作者: · 浏览: 25

面向对象编程

--纯虚函数、容器与继承



I.纯虚函数

在函数形参后面写上 =0 以指定纯虚函数:

class Disc_item : public Item_base
{
public:
    double net_price(size_t) const = 0;	//指定纯虚函数
};

将函数定义为纯虚函数能够说明,该函数为后代类型提供了可以覆盖的接口,但是这个类的版本绝不会调用。重要的是,用户将不能创建Disc_item类型的对象。

    Disc_item discount; //Error
    Bulk_item bulk;     //OK
    //因为Bulk_item类继承自 Disc_item 类,并且重写了 net_price 函数

【注解】

含有(或继承)一个或多个纯虚函数的类是抽象基类。除了作为抽象基类的派生类的对象组成部分,不能创建抽象类型的对象。

//P503 习题15.26/27
class Disc_item : public Item_base
{
public:
    Disc_item(const std::string &book = "",
              double sales_price = 0.0,
              std::size_t qty = 0,
              double disc_rate = 0.0):
        Item_base(book,sales_price),quantity(qty),discount(disc_rate) {}

    double net_price(size_t) const = 0;

protected:
    std::size_t quantity;
    double discount;
};

//...
int main()
{
    Disc_item item;
}

错误信息:

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" name="图像1" align="left" width="427" height="77" border="0" alt="\" />





II.容器与继承

我们希望使用容器(或内置数组)保存因继承而相