重载操作符

要重载操作符,需使用被称为操作符函数的特殊函数形式。
操作符函数格式:operator op(argument-list),其中op是要重载的操作符。op须是有效的C++操作符,不能虚构一个新的符号。
在操作符表示法中,操作符左侧的对象是调用对象,右边的对象是作为参数被传递的对象。

重载+运算符,t4=t1+t2+t3;
由于+是从左至右结合的操作符,上述语句首先被转化成:t4=t1.operator+(t2+t3);
然后,函数本身被转换成一个函数调用:t4=t1.operator+(t2.operator+(t3));

操作符重载的限制:
1.重载后的操作符必须至少有一个操作符是用户定义的类型。
2.使用操作符时不能违反操作符原来的句法规则,例如不能把一个二元操作符重载成一元操作符,也不能改变操作符的优先级。
3.不能定义新的操作符。
4.大多数操作符可以通过成员或非成员函数进行重载,但=、()、[]、->只能通过成员函数进行重载。

对非成员重载操作符函数来说,操作符表达式左边的操作数对应于操作符函数的第一个参数,右边的操作符对应于第二个参数。使用非成员函数可以按所需的顺序获得操作数,但引发了一个新问题:非成员函数不能访问类的私有数据,因此创建了友元函数。

创建友元函数的第一步是将其原型放在类声明中,并在原型前加上关键字friend:
friend Time operator* (double m,const Timer &t);
虽然operator*()函数是在类声明中定义的,且与成员函数的访问权限相同,但它并不是成员函数,因此不能使用成员操作符来调用。
因为它不是成员函数,因此不能用Time::限定符,也不能在定义中使用关键字friend:
Timer operator* (double m,const Time &t){}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值