多态性与前面提到的数据封装和担任性配合组成了面向工具措施设计的三个重要机制。
1.静态联编与动态联编
由于函数重载的存在,当措施中呈现挪用同名函数时,编译器会按照函数的参数范例、个数抉择挪用 执行哪一个同名函数的代码,这种把一个函数的挪用与适当的函数实现代码接洽在一起的进程,叫做联编 。按照联编的实现阶段的差异,可将其分为静态联编和动态联编两种。
静态联编是在措施编译阶段确定一个函数挪用与函数实现代码间的对应干系,这种对应干系确定下来 后,在措施运行进程中就按照这个对应干系去挪用执行相应的函数代码,而且这种对应干系在措施运行过 程中始终保持稳定。
而动态联编是在编译阶段不能抉择执行哪个同名的被调函数,只在措施运行进程中按照需要处理惩罚的对 象范例来抉择执行哪个类的成员函数。
2.多态性
所谓多态性就是指同样的动静被类的差异工具吸收时导致的完全差异的行为的一种现象。这里所说的 动静即对类的成员函数的挪用。
函数的重载可以实现多态性,但这里要讲的多态性是通过虚函数来实现的,而虚函数又必需存在于继 承的情况下。
C++语言支持两种范例的多态:一种是编译时的多态(静态多态),另一种是运行时的多态(动态多态 )。在编译时的多态是通过静态联编实现的,而在运行时的多态则是通过动态联编实现的。
3.虚函数
声明虚函数的要领是在基类中的成员函数原型前加上要害字virtual。名目如下:
class 类名{
……
virtual 范例 函数名(参数表);
……
};
当一个类的成员函数声明为虚函数后,这就意味着该成员函数在派生类中大概有差异的实现,也就是 说,该函数在派生类中大概需要界说与其基类虚函数原型沟通的函数。
虚函数是动态联编的基本,当用基类范例的指针或引用的要领指向差异派生类工具时,系统会在措施 运行中按照所指向工具的差异自动选择适当的函数,从而实现了运行时的多态性。
当通过基类指针或引用标识工具并挪用成员函数时,由于基类指针可以指向该基类的差异派生类工具 ,因此存在需要动态联编的大概性,但详细是否利用动态联编,还要看所挪用的是否是虚函数。
虚函数可以在一个或多个派生类中被从头界说,但它要求在派生类中从头界说时必需与基类中的函数 原型完全沟通,包罗函数名、返回值范例、参数个数和参数范例的顺序。
只有类的成员函数才气声明为虚函数,但类的结构函数以及全局函数和静态成员函数不能声明为虚函 数。
4.用基类指针指向公有派生类工具
指向基类的指针自然可以指向其公有派生类的工具。可是,由于基类指针自己的范例并没有改变,因 此,基类指针仅能会见派生类中的基类部门。
5.纯虚函数与抽象类
在界说一个表达抽象观念的基类时,有时大概会无法给出某些成员函数的详细实现。这时,就可以将 这些函数声明为纯虚函数。
纯需函数的声明名目如下:
virtual 范例 函数名(参数表)=0;
声明白纯虚函数的基类只是用于担任,仅作为一个接口,详细成果在其派生类中实现。
声明白纯虚函数的类,称为抽象类。抽象类只能用作基类来派生新类,而不能用来建设工具。
相关文章
C++进修摘要之二:结构函数和析构函数
http://www.bianceng.cn/Programming/cplus/200911/12302.htm
C++进修摘要之一:类和工具
http://www.bianceng.cn/Programming/cplus/200911/12301.htm