下载此文档

运算符重载.ppt


文档分类:IT计算机 | 页数:约78页 举报非法文档有奖
1/78
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/78 下载此文档
文档列表 文档介绍
第6章运算符重载
运算符重载是C++的一项强大功能。通过重载,可以扩展C++运算符的功能,使它们能够操作用户自定义的数据类型,增加程序代码的直观性和可读性。
本章主要介绍类成员运算符重载与友元运算符重载, 二元运算符与一元运算符重载, 运算符++、--、[]、()重载, this指针与运算符重载及流运算符<<和>>的重载
运算符重载基础
1、运算符重载的概念
C++的运算符对语言预定义类型是重载的
int i=2+3;
double j=2+;
float f=float()+float();
对于上面的3个加法表达式,C++系统提供了类似于下面形式的运算符重载函数:
int operator+(int,int);
double operator+(int,double);
float operator+(float,float);
运算符重载基础
C++允许程序员通过重载扩展运算符的功能,使重载后的运算符能够对用户自定义的数据类型进行运算。
比如,plex,其形式如下:
plex{
double real,image;
public:
......
};
假设定义了下面的复数对象,并且要实现两个复数相加的运算。
Complex c1,c2,c3;
……
c1=c2+c3;
why?
使程序便于编写和阅读
使程序定义类型与语言内建类型更一致
how?
使用特殊的成员函数
使用自由函数,一般为友元
运算符重载基础
1. 运算符重载限制
可以重新定义大多数运算符,
+ - / * % ^ & | ~ ! = < > +=
-= *= /= %= ^= &= |= >>
>>= <<= == != <= >= [ ]
() new new[] delete delete[]
不能定义新的运算符
不能重载某些特殊运算符,包括: . .* -> :: ?: sizeof typeid
不能改变运算符的目、优先级、结合性
不能重载语言预定义类型的运算符含义
如# ##
无隐含重载,即:定义了+,并隐含不定义+=
程序定义的含义与运算符固有含义吻合
运算符重载基础
运算符重载基础
2. 运算符重载的语法
运算符的计算结果是值,因此运算符函数是要返回值的函数。其重载的语法形式如下:
返回类型 operator@(参数表)
其中,operator是C++的保留关键字,表示运算符函数。@代表要重载的运算符,它可以是前面列举的可重载运算符中的任何一个。
运算符重载基础
3、与类相关的运算符重载方式
(1)C++为类默认的重载运算符
①赋值运算(=);
②取类对象地址的运算函符(&);
③成员访问运算(如“.”和“->”)。
这些运算符不需要重载就可以使用,但要在类中使用其他运算符,就必须明确地重载它们。
运算符重载基础
(2)非静态成员运算符重载
以类成员形式重载的运算符参数比实际参数少一个,第1个参数是以this指针隐式传递的。
plex{
double real,image;
public:
Complex operator+(Complex b){……}
......
};
运算符重载基础
(3)友元或普通函数方式重载运算符
如果将运算符函数作为类的友元重载,它需要的参数个数就与运算符实际需要的参数个数相同。比如,plex类的加法运算符,则形式如下:
plex{
……
plex operator+(Complex plex b); //友元声明
};
Complex operator+(Complex plex b){……} //plex operator-(Complex plex b){……} //普通函数
重载二元运算符
类与二元运算符重载
1、二元运算符的调用形式与解析
******@bb 可解释成 @(bb)
或解释成 operator@(aa,bb)
如果两者都有定义,就按照重载解析
class X{
public:
void operator+(int);
X(int);
};
void operator+(X,X);
void operator+(X,double);
void f(X a)
{
a+2; //+(2)
2+a; //::operator+(X(2),a)
a+; //::operator+(X,double);
}

运算符重载 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数78
  • 收藏数0 收藏
  • 顶次数0
  • 上传人yzhlya
  • 文件大小657 KB
  • 时间2018-01-30
最近更新