C++拾遗:多态性

来源:互联网 发布:wireshark ubuntu 编辑:程序博客网 时间:2024/06/05 16:25

参考资料:http://hi.baidu.com/smurfyan/item/2c723e89c61d7ece99255fc3

大部分转的,作了少量编辑,补充点内容。


1、多态性的概念

    在面向对象的概念中,多态性是指不同对象接收到相同消息时,根据对象类的不同产生不同的动作。多态性提供了同一个接口可以用多种方法进行调用的机制,从而可以通过相同的接口访问不同的函数。具体地说,就是同一个函数名称,作用在不同的对象上将产生不同的操作。

    多态性提供了把接口与实现分开的另一种方法,提高了代码的组织性和可读性,更重要的是提高了软件的可扩充性。

多态的三大特征: 要有重写,要有继承,父类指向子类。

重写与父类指向子类通过虚函数实现,是为了实现接口的重用。

继承是为了实现代码的重用。




2、编译时的多态性和运行时的多态性

首先,一般提到多态,我们说的是运行时多态,而不是指编译时多态。严格来说,只有运行时多态才叫多态,函数重载与运算符重载不是面向对象的,所以不能称为多态,模版属于范型,也不包含于面向对象。

由静态联编支持的多态性称为编译时的多态性静态多态性,也就是说,确定同名操作的具体操作对象的过程是在编译过程中完成的。

▲C++用函数重载运算符重载来实现编译时的多态性。模版也属于编译时多态。

由动态联编支持的多态性称为运行时的多态性动态多态性,也就是说,确定同名操作的具体操作对象的过程是在运行过程中完成的。

▲C++用继承虚函数来实现运行时的多态性。


3、重载(overload)与重写(override)

重载:同名函数不同参数。不属于面向对象,在编译期实现,通过编译器将同名函数名变换而实现出多个不同名的函数。

重写:也称覆盖,子类中对于父类同名同参数函数的完全重新编写。属于面向对象,在运行期实现,通过虚函数实现,主要是为了实现接口的重用,将相同接口对应于不同的类型实现不同的方法。重写要求函数名与参数全部一样,否则就不是重写,而是重载。


4、联编

联编也称绑定,是指源程序在编译后生成的可执行代码经过连接装配在一起的过程。联编分为两种:静态联编和动态联编。

① 静态联编

在运行前就完成的联编,又称前期联编。这种联编在编译时就决定如何实现某一动作,因此要求在程序编译时就知道调用函数的全部信息。这种联编类型的函数调用速度很快,效率也很高。

② 动态联编

在运行时动态地决定实现某一动作,又成后期联编。这种联编要到程序运行时才能确定调用哪个函数,提供了更好的灵活性和程序的易维护性。


0 0
原创粉丝点击