15.1 oop:概述
- 面向对象程序设计核心思想
- 数据抽象 ,继承,动态绑定
继承:联系在一起的类构成一种层次关系,通常在层次关系的根部有一个基类 派生类:其他类则直接或间接地从基类继承而来 继承示例代码
class Quote
{
public:
string isbn()const;
virtual double net_price(size_t n)const;
};
class Bulk_quote :public Quote
{
public:
double net_price(size_t)const override;
};
override关键字:新标准 允许派生类显示地注明他将使用那个成员函数改写基类的虚函数
动态绑定:
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;
}
重点是 Quote的调用 ,看 double ret =item.net_price(n); 这一段是用Quote的对象调用函数,他也是可以用派生类Bulk_quote的对象调用它。而且print_total函数调用的是引用类型调用net_price函数的。 下面的代码解释了你用基类和派生类的区别,是不一样的。
Quote basic;
Bulk_quote bulk;
print_total(cout, basic, 20);
print_total(cout, bulk, 20);
动态绑定:上述过程中函数的运行版本由实参决定, 就是在运行时,而不是事先知道,是在运行的时候, 就是运行时选择函数的版本,所以动态绑定有时又被称为运行时绑定
在c++语言,当我们使用基类的引用(或者指针) 调用一个虚函数(virtual)时将发生动态绑定
15.2 定义基类和派生类
|