为了账号安全,请及时绑定邮箱和手机立即绑定

C++中为什么重载前置++运算符要加个&?

C++中为什么重载前置++运算符要加个&?

C++
交互式爱情 2019-04-08 08:04:27
#include<iostream>using namespace std;class Complex{protected:double real; //复数的实部double image; //复数的虚部public: Complex(double r = 0.0, double i = 0.0){real = r; image = i;}void output();Complex& operator ++(); //前置增1运算符函数Complex operator ++(int); //后置增1运算符函数 };void Complex::output(){if (image < 0.0) cout<<"("<<real<<image<<"i)";elsecout<<"("<<real<<"+"<<image<<"i)";}Complex& Complex::operator++(){++real;return *this; }Complex Complex::operator++(int){return Complex(real++, image);}int main(){Complex a(2.0, 3.0), b(3.0, 2.0);cout<<"++a: ";(++a).output();cout<<"; after ++a, a is: ";a.output();cout<<endl;cout<<"b++: ";(b++).output();cout<<"; after b++, b is: ";b.output();cout<<endl;return 0;}
查看完整描述

4 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞


1

2

3

4

5

6

7

8

9

10

Complex& Complex::operator++() // 返回一个引用即代表当前对象本身

{

        ++real;

        return *this;  // 返回当前对象(立即可体现出来前置++的值)

}

 

Complex Complex::operator++(int)

{

        return Complex(real++, image); // 这里只是返回一个对象的副本。不能体现real++后的值(因为是后置++),所以后置++只能先取值。然后再++

}


 


查看完整回答
反对 回复 2019-04-09
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

这里返回对象的引用, 可以连续使用。
举个例子 cout<<是我们经常用的吧
其实是重载了<<这个操作符。
如果不返回引用
cout<<a<<b<<endl; 就不可以一起写了。
如果返回自身的引用 cout<<a之后,返回身身的引用,后面可以继续接b了。
就是这个意思吧。好多重载操作符,作用其实都是这样的。
还有 "="的重载
返回引用的目的 显然就是 方便写成 a = b = c;
为什么可以这样 其实是a = (b = c);
b=c返回的是b的引用,然后再继续 a = b ;如果不反回自身的引用,显然就不行了!

 


查看完整回答
反对 回复 2019-04-09
?
精慕HU

TA贡献1845条经验 获得超8个赞

1、因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。
举个例:
cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<<a之后,返回身身的引用,后面可以继续接b了。就是这个意思吧。好多重载操作符,作用其实都是这样的。

2、引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名。


查看完整回答
反对 回复 2019-04-09
?
郎朗坤

TA贡献1921条经验 获得超9个赞

& 代表引用,形参是引用(非const型)时,就是将该对象自己传递进函数了返回值是&时用在运算符的返回值是左值时,常用有这几个:所有的赋值(包括复合赋值),前缀自加自减,下标运算符

查看完整回答
反对 回复 2019-04-09
  • 4 回答
  • 0 关注
  • 1489 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信