C++语言中函数重载与运算符重载问题

时间:2022-09-08 07:41:12

C++语言中函数重载与运算符重载问题

摘要 多态性是面向对象程序设计的重要特征之一。它与封装性和继承性共同构成了面向对象程序设计的三大特征。封装性是基础,继承性是关键,多态性是补充,多态性又存在于继承的环境之中,所以这三大特征是相互关联的,相互补充的。C++语言中有两种重载:函数重载和运算符重载。运算符重载很重要,它的实质就是函数重载。本文中通过总结自己的学习经验,简单分析了C++语言中函数重载与运算符重载的问题。

关键词 多态性;面向对象;函数重载;运算符重载

中图分类号TP39 文献标识码A 文章编号 1674-6708(2011)40-0196-02

0 引言

多态性是面向对象程序设计的重要特征之一,它与封装性和继承性共同组成面向对象的程序设计的三大基本特征,在函数重载中,同一个函数名可对应若干种不同的实现,依据函数参数的类型、个数和顺序来确定某个实现。在运算符重载中,同一个运算符对应着很多种功能,这些功能是通过函数来定义的,依据操作数的类型来确定应选运算符的功能。我们接触的还有另一种是指同样的消息被不同类的对象接受时产生完全不同的实现,该情况大多产生在多类继承中不同类中的相同说明的成员函数的多态行为。其中多态性分为专用多态和通用多态,专用多态分为强制多态和重载多态;通用多态分为参数多态和包含多态。其中重载是实现C++多态性的一种十分重要的机制,成为重载多态,即为程序正文中相同作用域内的同一个标识符赋予不同的操作语义,实质上就是实现了程序空间到代码空间的一对多映射。

1 函数重载

简单地说函数重载就是赋给同一个函数名多个含义。在我们学的C++中函数重载分为普通函数的重载和成员函数的重载,也就是说我们所学的函数重载可以以两种不同的方式来实现,就是我们所说的普通函数的重载和成员函数的重载。

1.1 普通函数的重载

例1:

#include

float min(float x,float y){return x>y?x:y;}//求2个浮点型小数的最小值

float min(float x,float y,float z) {return x>y?(x>z?x:z):(y>z?y:z);}

//求3个浮点型小数的最小值

void main( )

cout

}

运行的结果:1.2,3.2

上一例题中,两个函数都是普通的函数重载,由于主函数中调用的两个函数对应的参数个数不同,所以通过形参和实参的结合,我们得到了运行的结果。

1.2 成员函数的重载

例2:

#include

class A

{

public:

A( ): a(0){cout

A(int x): a(x){cout

private:int a;

};

void main( )

{ A a1,a2(3); }

运行结果为: Default Constructing 0

Constructing 3

这是一个很常见的习题,该函数调用了构造函数的两种形式,有参和无参,对应于主函数中带有不同形式参数的函数,我们得到不同的结果。

2 运算符重载

运算符重载就是就是赋予已有的运算符多重含义,即多种功能。C++语言中通过重新定义运算符,使它能够用于特定类的对象执行的特定的功能。一般情况下运算符重载有两种形式,重载为类的成员函数和重载为有元函数两种。

2.1 重载为类的成员函数

例1:

#include

class complex

{

Public:complex(){real=imag=0;}

complex(double r,double i){real=r;imag=I;}

complex operator +(const complex &c);

complex operator -(const complex &c);

friend void print(const complex &c);

Private:double real,imag;

};

inline complex complex::operator +(const complex &c)

{return complex (real+c.rael,imag+c.imag);}

inline complex complex::operator -(const complex &c)

{return complex (real-c.rael,imag-c.imag);}

void print (const complex &c);

{

if (c.imag

cout

else

cout

}

void main()

{

complex c1(2.0,3.0),c2(4.0,-2.0),c3;

c3=c1+c2;

print(c3);

cout

c3=c1-c2;

cout

print(c3);

}

执行该程序的输出结果:

c1+c2=6+1i;

c1-c2=-2+5i;

2.2 重载为有元函数

执行的结果同例1,两种运算符比较,我们知道单目运算符最好被重载为成员函数,双目运算符最好被重载为有元函数。

3 结论

以上我们总结了函数重载和运算符重载的区别和特点。众所周知,重载是为了以不同的方式来实现函数,我们如果熟练的应用这门技术,可以提高程序的运行效率和可读性,通过学习,使我们更透彻地理解了C++的多态性问题。

参考文献

[1]谭浩强.C语言程序设计[M].3版.北京:清华大学出版社,2005,8.

[2]吕凤翥.C++语言基础教程[M].2版.清华大学出版社,2007,2.

[3]Stanley B.Lippman.C++Primer中文版[M].人民邮电出版社,2006,3.

上一篇:浅谈预应力结构施工技术 下一篇:国产可控硅监视(TM)及阀基电子设备(VBE)的应用