孙明方,周园园
沈阳师范大学物理科学与技术学院,辽宁 沈阳 110034
多态性是面向对象程序设计的重要特征之一,它与封装性和继承性共同组成面向对象的程序设计的三大基本特征,在函数重载中,同一个函数名可对应若干种不同的实现,依据函数参数的类型、个数和顺序来确定某个实现。在运算符重载中,同一个运算符对应着很多种功能,这些功能是通过函数来定义的,依据操作数的类型来确定应选运算符的功能。我们接触的还有另一种是指同样的消息被不同类的对象接受时产生完全不同的实现,该情况大多产生在多类继承中不同类中的相同说明的成员函数的多态行为。其中多态性分为专用多态和通用多态,专用多态分为强制多态和重载多态;通用多态分为参数多态和包含多态。其中重载是实现C++多态性的一种十分重要的机制,成为重载多态,即为程序正文中相同作用域内的同一个标识符赋予不同的操作语义,实质上就是实现了程序空间到代码空间的一对多映射。
简单地说函数重载就是赋给同一个函数名多个含义。在我们学的C++中函数重载分为普通函数的重载和成员函数的重载,也就是说我们所学的函数重载可以以两种不同的方式来实现,就是我们所说的普通函数的重载和成员函数的重载。
例1:
上一例题中,两个函数都是普通的函数重载,由于主函数中调用的两个函数对应的参数个数不同,所以通过形参和实参的结合,我们得到了运行的结果。
例2:
这是一个很常见的习题,该函数调用了构造函数的两种形式,有参和无参,对应于主函数中带有不同形式参数的函数,我们得到不同的结果。
运算符重载就是就是赋予已有的运算符多重含义,即多种功能。C++语言中通过重新定义运算符,使它能够用于特定类的对象执行的特定的功能。一般情况下运算符重载有两种形式,重载为类的成员函数和重载为有元函数两种。
例1:
执行的结果同例1,两种运算符比较,我们知道单目运算符最好被重载为成员函数,双目运算符最好被重载为有元函数。
以上我们总结了函数重载和运算符重载的区别和特点。众所周知,重载是为了以不同的方式来实现函数,我们如果熟练的应用这门技术,可以提高程序的运行效率和可读性,通过学习,使我们更透彻地理解了C++的多态性问题。
[1]谭浩强.C语言程序设计[M].3版.北京:清华大学出版社,2005,8.
[2]吕凤翥.C++语言基础教程[M].2版.清华大学出版社,2007,2.
[3]Stanley B.Lippman.C++Primer中文版[M].人民邮电出版社,2006,3.