面向对象编程概念的两项主要特质:继承和多态。
继承
- 继承:将一群相关的类组织起来,分享其间的共通数据和操作行为;
- 继承机制定义了父子关系/继承关系:
父类/基类:定义了所有子类的共通的公有接口和私有实现;
子类/派生类:可以增加/覆盖继承而来的东西,以实现子类自身独特的行为; - 抽象基类:仅仅为了编程设计而存在的类,主要用于定义派生类的共同操作;
- 间接利用"指向抽象基类"的指针或引用,来操作一个类系统中的各对象,而不直接操作各个实际对象,可以在不更动原程序的前提下,加入或移除任何一个派生类。
多态
- 在这些类之上进行编程,如同操控单一个体,并非相互独立的类,并可以更灵活地来加入或移除任何特定的类;
- 让基类的指针或引用得以十分透明地指向其任何一个派生类的对象。
void loan_check_in(LibMat &mat) //LibMat:抽象基类
{
//mat:某个派生类的对象
mat.check_in();
if(mat.is_late())
mat.assess_fine();
if(mat.waiting_list())
mat.notify_available();
}
动态绑定
- 静态绑定:程序执行前已解析出应该调用哪个类的成员函数;
- 动态绑定:程序执行时依据抽象基类的类对象所代表的实际对象解析出应该调用哪个派生类的成员函数。
总结
- 继承:让我们可以定义一整群互有关联的类,并共享通用的接口;
- 多态:让我们可以用一种与类型无关的方式来操作类对象,通过抽象基类的指针或引用来操纵一整群互有关联的类的共同接口;
- 动态绑定:在程序执行时依据抽象基类的指针或引用所指的是基类对象的类型才能决定。