【发布时间】:2016-10-15 19:20:59
【问题描述】:
问题源于cplusplus。表示二维向量的类定义如下,
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 与 b 具有相同的 x 和 y;第二,c 设置为a 的别名/引用?我会很感激任何例子。
【问题讨论】:
-
这只是一个多重赋值。
c=a=b首先执行a=b,然后是c=a。很长一段时间以来,我倾向于从operator=返回void,以避免这种有问题的构造,但后来我了解到标准库容器要求容器项的复制赋值运算符返回对分配给的对象的引用。 -
还是一头雾水。我想知道您是否将
c定义为CVector & c;但对于a和b,它们被定义为CVector?其次,a和b是不是真的是不同的对象(虽然x和y在执行后是一样的)但是c和a是同一个对象(具有相同的地址)到期到return *this;?@Cheersandhth.-Alf -
你是说如果我们只想设置
a.x和a.y等于b.x和b.y,那么我们可以只使用a=b而不用打扰多重赋值?@Cheersandhth .-阿尔夫 -
最后一个问题是:由于
c是引用类型而不是类型CVector,所以c=a中的=符号只是一个普通的赋值符号,但=符号ina=b是特殊的,仅在CVector对象之后复制成员x和y的值=符号(此处为b)?@Cheersandhth.-Alf -
您需要提供一个完整但最小的示例,供读者直接试用。关于
c作为参考的事情在问题中并不明显。目前尚不清楚这是有意的还是误解。现在投票结束,因为缺乏这种可重复的例子。
标签: c++ class reference operator-overloading