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

#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)";
else
cout<<"("<<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;
}

交互式爱情
浏览 1490回答 4
4回答

陪伴而非守候

12345678910Complex&&nbsp;Complex::operator++()&nbsp;//&nbsp;返回一个引用即代表当前对象本身{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++real;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*this;&nbsp;&nbsp;//&nbsp;返回当前对象(立即可体现出来前置++的值)}&nbsp;Complex&nbsp;Complex::operator++(int){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Complex(real++,&nbsp;image);&nbsp;//&nbsp;这里只是返回一个对象的副本。不能体现real++后的值(因为是后置++),所以后置++只能先取值。然后再++}&nbsp;

阿波罗的战车

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

精慕HU

1、因为重载自加运算符后可以返回对象的引用, 以方便在表达式中连续使用。举个例:cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<<a之后,返回身身的引用,后面可以继续接b了。就是这个意思吧。好多重载操作符,作用其实都是这样的。2、引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名。

郎朗坤

& 代表引用,形参是引用(非const型)时,就是将该对象自己传递进函数了返回值是&时用在运算符的返回值是左值时,常用有这几个:所有的赋值(包括复合赋值),前缀自加自减,下标运算符
打开App,查看更多内容
随时随地看视频慕课网APP