小白求助 关于返回引用的疑问 请大佬过目
Array& Array::operator=(Array& a){
if (this->m_space != NULL)
{
delete[] this->m_space;
this->m_len = 0;
}
this->m_len = a.m_len;
this->m_space = new int;
for (int i = 0; i < m_len; ++i)
{
this->m_space = a.m_space;
}
return *this;问题:等号操作符重载这里什么时候 返回*this,什么时候 返回 a?
}
一直返回 *this
不能返回 a,不然可能造成递归调用 BngThea 发表于 2020-4-3 18:37
一直返回 *this
不能返回 a,不然可能造成递归调用
哦哦 知道了 BngThea 发表于 2020-4-3 18:37
一直返回 *this
不能返回 a,不然可能造成递归调用
返回a怎么造成的递归调用呢?
不是返回a的引用 就是a自身 相当于左值
然后怎么自己调自己呢 大佬 琴长不过时光 发表于 2020-4-3 18:39
返回a怎么造成的递归调用呢?
不是返回a的引用 就是a自身 相当于左值
然后怎么自己调自己呢 大佬
我是说可能,因为我没试过
因为你返回的本身也是类对象的引用,所以可能造成递归调用自身 BngThea 发表于 2020-4-3 19:36
我是说可能,因为我没试过
因为你返回的本身也是类对象的引用,所以可能造成递归调用自身
哦哦 谢谢大佬了 本帖最后由 倒戈卸甲 于 2020-4-4 10:48 编辑
首先,返回值类型是由函数名前面的那个Array[]来声明的,这个声明就是返回引用。所以return a和return *this都是在返回引用(引用的语法就是这样,只要有&符号,普通变量和*p都成立为引用)。
于是那么,前者返回的是传入的对象的引用,后者返回的是对象自身的引用。举个例子,你在对象b的方法中,传入参数为对象a的引用,却又返回了对象a的引用,这肯定没有任何意义。但如果返回*this,也就是返回b自身的引用,这就很意义了,因为引用的本质是地址传递,那外部就可以对象b的地址,b的属性和方法都能被接收。
这其实也是c++非常推荐的语法,简洁又可靠,要彻底弄明白这段代码,你可以每天都使用 倒戈卸甲 发表于 2020-4-4 10:32
首先,返回值类型是由函数名前面的那个Array[]来声明的,这个声明就是返回引用。所以return a和return *thi ...
谢谢大佬了 有点明白了 慢慢学吧 想一次性搞懂难度估计有点大 本帖最后由 howzyao 于 2020-4-6 11:42 编辑
我深深的复习了楼主的深复制,回顾到了重载赋值号。谢谢
只是,能否将入参对像写为:const Array &a 呢? howzyao 发表于 2020-4-6 11:41
我深深的复习了楼主的深复制,回顾到了重载赋值号。谢谢
只是,能否将入参对像写为:const Array &a 呢?
我个人以为 一般 拷贝构造函数才后面写const Array& a吧普通的操作符重载一般写Array &a 不一定正确 不过我看的视频是这样写的
页:
[1]