C++步步为营

C++---CHAPTER 15: OBJECT-ORIENTE

2019-08-04  本文已影响0人  世界上的一道风

概述

可以看到,第二个函数跟具体的类型相关。类似这样的函数,基类希望它的派生类各自定义适合自身的版本,此时基类就将这些函数声明为虚函数(virtual function),而派生类必须在其内部对所有重新定义的虚函数进行声明。

Quote类
class Quote{
  public:
    std::string isbn() const;
    virtual double net_price(std::size_t n) const;
}

派生类通过类派生列表(冒号+访问说明符+逗号分割的基类列表)表明哪些是基类:

class Bulk_quote : Quote{
  public:
      double net_price(std::size_t) const Override;
}

定义基类和派生类

定义基类
定义派生类
类型转换与继承

虚函数

Quote base("0-201-82470-1", 50); //基类
print_total(count, base, 10); // 调用Quote::net_price
Bulk_quote derived("0-201-82470-1" ,50,  5,  0.19);
print_total(cout, derived, 10); //调用Bulk_quote::net_price
不管baseP实际指向的对象类型是什么,调用Quote的net_price函数

double undiscounted = baseP -> Quote::net_price(42);

抽象基类

构造函数与拷贝控制

如果一个类没有定义拷贝控制操作,则编译器将为它合成一个版本;

class Quote{
public:
    //如果删除一个指向派生类对象的基类指针,则需要虚析构函数
    virtural ~Quote() = default; //动态绑定析构函数
}

一般来说,如果一个类需要析构函数,那么它也同样需要拷贝和赋值操作,但是基类的析构函数是一个例外。

容器与继承

上一篇下一篇

猜你喜欢

热点阅读