问题源于cplusplus .表示二维 vector 的类定义如下,
class CVector {
public:
int x,y;
CVector () {}
CVector (int a, int b) : x(a), y(b) {}
CVector& operator = (const CVector&);
};
CVector& CVector::operator= (const CVector& param)
{
x=param.x;
y=param.y;
return *this;
}
我的问题是如何使用 operator =
?例如,
CVector a, b;
b.x = 1;
b.y = 3;
CVector & c = a = b;
我现在的困惑是,假设有两个 CVector 对象 a
和 b
,如果我执行 c=a=b
(等同于到c=a.operator=(b)
),那么这里做了两件事是真的吗:第一,a
有相同的x
和 y
作为 b
;其次,c
被设置为 a
的别名/引用?如果有任何示例,我将不胜感激。
最佳答案
这实际上取决于您如何声明 c
。
如果 c
只是 CVector
,则表达式
a=b;
返回 CVector&
。然后,由于 c
是一个完整的对象 而不是引用,编译器正在寻找方法 XXX operator = (CVector&)
。
现在,CVector
没有任何 XXX operator = (CVector&)
方法(请注意,该方法获取引用,而不是 const 引用),但它有 CVector& operator = (const CVector&)
(一种获取 const 引用的方法)。
是否允许引用与 const 引用之间的转换?是的,所以方法 CVector& operator = (const CVector&)
将被调用。
现在,c
的值为a
和b
。同样,c
是一个对象。
现在,如果您将 c
声明为 CVector&
或 const CVector&
(引用),则表达式
CVector& c = a = b;
会将 c
别名为 a,因为您将 a.operator =(b)
返回的引用分配给了另一个引用。
总而言之,两者之间存在差异
CVector c = a = b;
和
CVector& c = a = b;
,第一个会将 a
的数据“复制”到一个真实的对象 c
而最后一个将别名 c
作为a
。
关于c++ - 如何将 C++ 关键字 "this"与成员函数 "operator="一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40063268/