c++重载的问题,请高手回答
Complex&Complex::operator--(){--m_dImag;--m_dReal;return*this;}constComplexComplex::o...
Complex &Complex::operator--()
{
--m_dImag;
--m_dReal;
return *this;
}
const Complex Complex::operator--(int)
{
Complex temp(*this);
--m_dImag;
--m_dReal;
return temp;
}
为什么前者返回值为引用,且在函数里面不用定义一个新的对象,而后者却需要。后者返回一个在函数里面定义的对象,不是说函数一结束,函数内定义的对象或者变量就销毁了吗,怎么还可以返回,不会出错吗?请解释的详细一点,太感谢了 展开
{
--m_dImag;
--m_dReal;
return *this;
}
const Complex Complex::operator--(int)
{
Complex temp(*this);
--m_dImag;
--m_dReal;
return temp;
}
为什么前者返回值为引用,且在函数里面不用定义一个新的对象,而后者却需要。后者返回一个在函数里面定义的对象,不是说函数一结束,函数内定义的对象或者变量就销毁了吗,怎么还可以返回,不会出错吗?请解释的详细一点,太感谢了 展开
1个回答
展开全部
前者是--号在前面,需要先减然后再把减之后的对象返回,因此直接对源对象进行操作,然后返回源对象就行了。
后者是--号在后面,需要返回减之前的值,但是同时也要对源对象进行减操作,但你如果在减之前就直接返回的话,就没法进行减操作了,所以只好先创建一个跟源对象一样的对象,然后对源对象减,然后返回创建的对象。
返回值是对象时有个拷贝的过程,会把内部的对象拷贝一份到外部的无名对象中,不会出错。
后者是--号在后面,需要返回减之前的值,但是同时也要对源对象进行减操作,但你如果在减之前就直接返回的话,就没法进行减操作了,所以只好先创建一个跟源对象一样的对象,然后对源对象减,然后返回创建的对象。
返回值是对象时有个拷贝的过程,会把内部的对象拷贝一份到外部的无名对象中,不会出错。
更多追问追答
追问
那如果是返回值为函数内定义的变量呢,只在函数内有效,返回时会不会出错。而且第一个为什么返回引用,而第二个不呢
追答
那如果是返回值为函数内定义的变量呢,不会,这是最基本的啊,所有的又返回值得函数return的不都是内部定义的变量么,只不过返回的时候会把内部变量拷贝到外部,这个道理跟函数调用时的形参和实参结合是一个道理。
返回引用更方便,但第二个没法返回引用,只有返回对象了,因为你如果返回引用,但那个引用所指向的对象已经被销毁了(正如你所说的),就会出错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询