C++__运算符重载

来源:互联网 发布:淘宝售后时间是多久 编辑:程序博客网 时间:2024/06/07 05:52
运算符重载的方法与实现
  • 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。运算符重载实质上是函数的重载。
  • 重载运算符的函数一般格式
  • 函数类型operator 运算符名称 (形参表列)
     { 对运算符的重载处理}
在定义了重载运算符的函数后,可以说:函数operator+重载了运算符+。
使用运算符重载能使用户程序易于编写、阅读和维护
需要说明的是: 运算符被重载后,其原有的功能仍然保留,没有丧失或改变。
作用与优点:
通过运算符重载,扩大了C++已有运算符的作用范围,使之能用于类对象。
运算符重载对C++有重要的意义,把运算符重载和类结合起来,可以在C++程序中定义出很有实用意义而使用方便的新的数据类型。
运算符重载使C++具有更强大的功能、更好的可扩充性和适应性,
重载运算符的规则
1C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
(2)C++允许重载的运算符
C++中绝大部分的运算符允许重载。
不能重载的运算符只有5个:
.         (成员访问运算符)
.*       (成员指针访问运算符)
∷      (域运算符)
sizeof   (长度运算符)
?:       (条件运算符)
(3) 重载不能改变运算符运算对象(即操作数)的个数。
(4) 重载不能改变运算符的优先级别。
(5) 重载不能改变运算符的结合性。
(6) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。
(7) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。即参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质
(8) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。

(9)运算符重载函数可以是类的成员函数也可以是类的友元函数,还可以是既非类的成员函数也不是友元函数的普通函数
运算符重载函数作为类成员函数和友元函数
运算符重载函数还可以是非成员函数
将双目运算符重载为友元函数时,在函数的形参表列中必须有两个参数,不能省略,形参的顺序任意,不要求第一个参数必须为类对象。但在使用运算符的表达式中,要求运算符左侧的操作数与函数第一个参数对应,运算符右侧的操作数与函数的第二个参数对应。
注意
    • C++规定,有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数,有的运算符则不能定义为类的成员函数(如流插入<<和流提取运算符>>、类型转换运算符)。
      由于友元的使用会破坏类的封装,因此从原则上说,要尽量将运算符函数作为成员函数。但考虑到各方面的因素,一般将单目运算符重载为成员函数,将双目运算符重载为友元函数。
重载流插入运算符和流提取运算符
    
用户自己定义的类型的数据是不能直接用“<<”和“>>”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载
对“<<”和“>>”重载的函数形式如下:
istream& operator >> (istream&,自定义类 &);
ostream& operator << (ostream&,自定义类 &);
即重载运算符>>的函数的第一个参数和函数的类型都必须是istream&类型,第二个参数是要进行输入操作的类。重载<<的函数的第一个参数和函数的类型都必须是ostream&类型,第二个参数是要进行输出操作的类。因此,只能将重载“>>”和“<<”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数C++的流插入运算符<<和流提取运算符>>C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostreamcincout分别是istream类和ostream类的对象在类库提供的头文件中已经对“<<”和“>>”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据
     1 重载流插入运算符<<
希望能用插入运算符“<<”来输出用户自己声明的类的对象的信息,这就需要重载流插入运算符“<<”。