玩命加载中 . . .

15.1-面向对象概述


通过继承(inheritance),联系在一起的类构成一种层次关系

  • 基类(base class):定义共同拥有的成员
  • 派生类(derived class):定义特有的成员
  • 虚函数(virtual function):基类希望派生类各自定义自己合适的版本
class Quote {
public:
    virtual double net_price(size_t n) const;   // 虚函数
};

// 派生类
class Bulk_quote : public Quote {
public:
    double net_price(size_t) const override;    // 覆盖基类的虚函数
};

动态绑定(dynamic binding):使得能用同一段代码分别处理派生类和基类

// 根据传入item形参的对象类型调用Quote::net_price,还是Bulk_quote::net_price
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;
    return ret;
}
print_total(cout, base, 20);    // 绑定基类对象,调用Quote::net_price
print_total(cout, bulk, 20);    // 绑定派生类对象,调用Bulk_quote::net_price

使用基类的引用或指针调用一个虚函数时将发生动态绑定


文章作者: kunpeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 kunpeng !
  目录