C++运算符重载详解

一、为什么要运算符重载

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 <运算符符号> (<参数表>)  
    {  
         <函数体>  
    }  

嗯就说这么多吧

下一次博客再具体讲实例哈哈哈

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值