运算符重载 课件.pdf
第七章运算符重载
7.1运算符重载概述
7.2运算符重载规则
7.3运算符重载形式
运算符重载和函数重载的概念基本相同,不同之处是:
(1)对于运算符重载,重载的是运算符。
(2)即使运算符只在当前程序中定义了一次,也称做运算
符重载。这是因为系统中对于所有运算符都已经有过
定义,当前程序中定义的运算符只是参数个数或参数
类型与系统定义过的运算符不同罢了。
(3)运算符重载必须满足C++语言的规定。
7.1运算符重载概述
C++语言规定了运算符重载的规则:
(1)重载的运算符要保持原运算符的意义。如原先单目的运算符只
能重载为单目的,不能重载为双目的。
(2)只能对已有的运算符重载,不能增加新的运算符。
(3)不是所有的运算符都可以重载。
(4)一些运算符不允许重载,不能重载的运算符包括:
“?;”、“.”、“-”、“::”、“sizeof”
(5)重载的运算符仍然保持系统规定优先级和结合性。例如,加减
运算符的优先级低于乘除运算符。
(6)运算符重载不能全部是C++中预定义的基本数据,这样做的目
的是为了防止用户修改用于基本类型数据的运算符性质。
7.2运算符重载规则
7.3.1成员函数重载运算符
7.3.2友元函数重载运算符
7.3运算符重载形式
运算符重载主要有两种形式:一种是类的成员函数形式,
一种是友元函数形式。
1、类的成员函数形式重载运算符
可以把运算符重载为类的成员函数。
class类名
{
返回类型operator运算符(形参表);
}
类外定义格式:
返回类型类名::operator运算符(形参表)
{
函数体;
}
2、类的友元函数重载运算符形式
在C++语言可以把运算符重载为类的友元函数。
class类名
{
friend返回类型operator运算符(形参表);
}
类外定义格式:
返回类型operator运算符(参数表)
{
函数体
}
运算符重载的几点准则:
•对于大多数双目运算符来说,重载为友元函数比重载为成员
函数适应性更强。
•赋值运算符应重载为成员函数。因赋值运算符重载为友元函
数时,有些情况的内部表示形式会出现二义性。
•单目运算符++和—等一般应重载为成员函数。
•运算符()为函数调用运算符,运算符[]为数组下标运算符,
这两个运算符应重载为成员函数。
•输入运算符“”和输出运算符“”必须重载为友元函数。
7.3.1成员函数重载运算符
7.3.2友元函数重载运算符