资源描述
函数重载与运算符重载的应用研究论文导读:多态性是面向对象的程序设计中的三大基本特征(封装性。多态性)之一。重载在C+中可分为两种:函数重载和运算符重载。运算符重载实质上就是函数重载。关键词:面向对象,多态性,函数重载,运算符重载1. 引言多态性是面向对象的程序设计中的三大基本特征(封装性,继承性,多态性)之一,其含义是指同一个消息被不同类型的对象接收时会导致不同的的行为实现。在C+中,多态性包括强制多态、重载多态、参数类型多态和包含多态四种。其中,重载是实现C+多态性的一种重要机制,称为重载多态,即为程序正文中相同作用域内的的同一个标识符赋予不同的操作语义,实质上也就是实现了程序空间到代码空间的一对多映射。重载在C+中可分为两种:函数重载和运算符重载。2. 函数重载在程序编译时,让相同的函数名映射到不同的函数代码,称为函数重载。在C+中,函数重载可以分别以普通函数和成员函数来实现。2.1 普通函数重载例1:#include int max(int x,int y)returnxy?x:y;/求2个整数的最大值int max(int x,int y,int z) /求3个整数的最大值returnxy?(xz?x:z):(yz?y:z);void main( )coutclass Apublic:A( ): a(0)coutclass Complex /复数类public:Complex(doublex,double y): real(x), imag(y) Complex operator+( )/前置增量运算符+重载为成员函数+real; +imag; return*this;Complexoperator+(int)/后置增量运算符+重载为成员函数Complex temp(*this);real+; imag+; return temp;private:double real,imag;/实部、虚部;int main( ) Complex c(1,2); 例3中声明了一个复数类Complex,其中有两个私有数据成员,分别表示实部和虚部。主函数执行时,编译器会自动调用构造函数创建对象c,即1+2i。在复数类Complex的声明中,以成员函数方式分别对前置、后置增量运算符这两个单目运算符进行了重载,使得Complex类对象可以进行前置、后置增量运算。论文发表。值得注意的是两者的区别,即后置增量运算符的重载函数中多一个int形参,它没有实际意义,只是为了区别于前置增量运算符的重载函数。3.3 友元函数方式可以在例3复数类Complex的声明中增加以下代码:friend ostream&operator(ostream &output,Complex &c) /流插入运算符重载为友元函数outputc.real;if (c.imag)output+c.imagi;outputendl;return output;上述代码以友元函数方式对流插入运算符进行了重载,使得Complex类对象可以通过流插入运算符实现输出。在例3的主函数中增加以下代码:coutc; /cout+c;/coutc+;/运行结果为:1+2i2+3i2+3i处执行时,编译器的理解为operator(cout, c),即调用重载后的流插入运算符函数,输出对象c,形成结果中的第一行;处执行时,首先+,编译器的理解为c. operator+( ),即调用重载后的前置增量运算符+函数。论文发表。论文发表。然后,编译器的理解为operator(cout,c),即调用重载后的流插入运算符函数,输出前置增量运算后的对象c,形成结果中的第二行;处执行时,首先+,编译器的理解为c. operator+(int),即调用重载后的后置增量运算符+函数。然后,编译器的理解为operator(cout, c),即调用重载后的流插入运算符函数,输出后置增量运算后的对象c,形成结果中的第三行。3.4 类型转换函数运算符重载中还有一种比较特殊的是强制类型转换运算符重载函数,重载后成为类的特殊成员函数,在适当的时候由编译器自动调用以实现类类型对象向普通数据类型数据的强制转换。可继续在例3 Complex类的声明中增加以下代码:operator double( )return real; /强制类型转换运算符重载为成员函数然后在主函数末尾增加一句:cout(c+5.0);此时,编译器首先执行c+5.0,由于没有对算术运算符+进行重载,所以编译器只能调用刚刚增加的类型转换函数operator double( )将Complex类对象c强制类型转换成double类型,由于经过了上述两次增量运算,此时对象c的实部real已经等于3.0;然后与5.0相加,最后输出结果为8.0。4. 结语以上对函数重载和运算符重载的概念,用法和区别进行了讨论。重载的目的是为了实现表达方式共享,熟练地掌握并运用重载,特别运算符重载,可以有效地提高程序的可读性,实现对C+语言本身的扩充,同时也能更深刻地理解C+中多态性的实现机制。参考文献:1 钱能. C+程序设计教程M. 北京: 清华大学出版社, 19992 曹计昌等著. C+语言及面向对象程序设计M. 北京: 高等教育出版社, 20043 郑莉, 董渊. C+语言程序设计M. 北京:清华大学出版社, 1999
展开阅读全文