通过继承(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
使用基类的引用或指针调用一个虚函数时将发生动态绑定