Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过引用返回对象_C++_Oop_Reference_Operator Overloading - Fatal编程技术网

C++ 如何通过引用返回对象

C++ 如何通过引用返回对象,c++,oop,reference,operator-overloading,C++,Oop,Reference,Operator Overloading,据我所知,这是我的参考类&ref=b;之后b=ref;那么c=b;SomeClass&ref2=c;然后c=ref2。但是,当b=ref或c=ref2时,我是否正在调用我重新加载的运算符=开关?类似于a.operator=(ref)的东西 如果你有: void operator=(const SomeClass& l_copy) { this->a = l_copy.a; } 那么您的作业将限于: b = a; c = b; 通过返回引用,可以按

据我所知,这是我的参考类&ref=b;之后b=ref;那么c=b;SomeClass&ref2=c;然后c=ref2。但是,当b=ref或c=ref2时,我是否正在调用我重新加载的运算符=开关?类似于a.operator=(ref)的东西

如果你有:

void operator=(const SomeClass& l_copy)
    {
        this->a = l_copy.a;
    }
那么您的作业将限于:

b = a;
c = b;
通过返回引用,可以按如下方式链接分配:

c = b = a;
// c.operator = (b.operator = (a));

//1: b.operator= ("ref a")
//2: c.operator= ("ref b")

通过重载操作符=in
SomeClass
,您正在执行复制赋值
lhs=rhs
(例如:
c=b
,c是
lhs
,b是
rhs
)。因为它返回一个匹配
SomeClass&operator=
预期参数类型的引用,所以可以链接多个副本分配,例如
c=b=a

c=b=a
c=(b=a)相同
,与
c.operator=(b.operator=(a))相同。没有为
a
调用
运算符=
。请注意,赋值具有从右到左的关联性<因此,code>b.operator=(a)
返回对
b
的引用,该引用用作
c.operator=
调用的参数。我问过当b=ref(SomeClass&ref=b)时对象是如何通过引用传输的。我是否使用我的重新加载的运算符=?什么是“重新加载”的运算符?你是在问
SomeClass&ref=b;b=参考案例?如果是这样,为什么您的代码会做一些完全不同的事情?其中没有
ref
。请编辑代码以匹配您的问题。@ZELIBOBA您可以重写
c=b=aas
b=a;SomeClass&ref=b;c=参考也具有相同的效果。最后的
c=b
c=ref
之间没有区别。还是不清楚你的问题是什么,对不起。
c = b = a;
// c.operator = (b.operator = (a));

//1: b.operator= ("ref a")
//2: c.operator= ("ref b")