一、为什么要运算符重载
C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的,但是大多时候我们需要对我们自己定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。
二、运算符重载的实质
实质:函数重载或者函数多态
三、运算符重载的规则
1、运算符重载不能改变运算符的优先级
这样会导致一些问题的出现,即重载后运算符不再遵循原有的优先级,但是,可以用圆括号()来强制指定表达式中重载的运算符的计算顺序。
2、重载不能改变运算符的结合律
就是运算符应有的顺序是从右到左还是从左到右。
3、重载不能改变运算符的“元数”(运算符的操作个数)
重载的一元运算符仍是一元运算符,二元运算符还是二元运算符,C++唯一的三目运算符(?:)不能重载。运算符&、*、+、-既可以做一元运算符,又可以做二元运算符,在每种情况下都可以重载。
4、不能创造新的运算符进行重载
只有现有的运算符才可以进行重载。
5、不能进行重载的运算符
(1).
(2).*
(3)::
(4)?:
(5)sizeof
四、作为类成员函数和全局函数的运算符函数比较
1、必须要做成员函数进行重载的运算符
(1)()
(2)[]
(3)*
(4)->
2、作为成员函和全局函数的运算符
(1)当运算符作为成员函数实现时,最左边(或者只有最右边)的操作数必须是运算符的一个类对象或者是对该类对象的一个引用。
(2)如果左操作数必须是一个不同类的对象或者是一个基本类型对象,那么该运算符函数必须作为全局函数来实现。
(3)如果全局运算符必须直接访问类的private或protected成员,那么该函数可以指定成该类的友元函数。
3、流插入运算符和流提取运算符为何作为全局函数来重载
重载的流插入运算符<<用在其左操作数的类型为ostream&之类的表达式中,如cout<<classObject。如果要在右操作数是用户定义类的对象的情况下使用该运算符,那么该运算符必须重载成全局函数。要以成员函数重载,运算符<<就必须成为ostream&类的成员。类似地,重载流提取运算符>>用在如cin>>classObject之类的表达式中,其左操作数的类型为istream&,其右操作数就是用户自定义类的对象,因此还运算符重载函数也必须是全局函数,此外,这两个运算符重载函数都可能需要访问要输出或输入的类对象的private数据成员,因此出于性能原因,可以把这些重载运算符函数指定为类的友元函数。
五、语法形式
<返回类型> operator <运算符符号> (<参数表>)
{
<函数体>
}
嗯就说这么多吧
下一次博客再具体讲实例哈哈哈