1. 类和继承
面向对象编程的主要目的之一就是提供可以重复使用的代码,减少开发周期,提高开发效率。
继承可以完成的一些工作:
- 在已有类的基础上添加功能。
- 给类添加新的数据成员。
- 可以修改类方法的行为。
派生类与基类之间的关系:
- 派生类对象可以使用基类(公有的)方法。
- 基类指针可以在不进行显示类型转换的情况下指向派生类对象,但只能调用基类方法。
- 基类引用可以在不进行显示类型转换的情况先引用派生类对象,但只能调用基类方法。
2. 多态公有继承
在实际开发过程中,我们有时候希望同一个方法在派生类和基类中的行为是不同的,也就是说,方法的行为取决于调用该方法的对象,即同一个方法的行为随上下文而异,我们将这种复杂的行为称为多态(具有多种形态)。
实现多态公有继承的方法:
-
在派生类中重新定义基类的方法。
-
使用虚方法(虚函数)。
3. 静态联编和动态联编
函数名联编:编译器将源代码中的函数调用解释为执行特定的函数代码称为函数名联编。
我们将在编译过程中进行联编称为静态联编(早期联编)。但对于虚函数这种情况,编译器在编译的时候并不一定知道用户将会选择哪种类型的对象,因此,编译器必须生成能够在程序运行时根据用户的选择正确的虚函数的代码。我们将这种在程序运行过程中选择对应的方法(函数)的联编称为动态联编(晚期联编)。
因此,动态联编是在虚函数的支持下实现的。
动态联编主要包含一下方面:
-
成员函数必须声明为虚函数,即前面加virtual。
-
如果基类中对某个成员函数声明了虚函数,则其派生类中的该成员函数不需要再声明。
从代码维护的层面考虑,随着类的层级的扩展,动态联编提高了代码的灵活性和问题的抽象性,使得程序的维护成本大大降低。