这里有一个非常相似的问题,但我不理解以下内容:
想象一下,我有一个二维数学向量的类,我想定义setter函数:
/** Setters **/
Vector2D& setX(double xcoor) {x = xcoor; return *this;}
Vector2D& setY(double ycoor) {y = ycoor; return *this;}
现在;这个";指针包含为其调用函数的实例的地址。
Vector2D VV(2,4);
VV.setX(1).setY(5);
在这种情况下;这个";具有VV实例的地址。那么,为什么不直接返回这个,而是返回这个呢?
在这种情况下"这个";具有VV实例的地址。
右。
为什么不直接返回this,而是返回*this?
假设setX
将返回指针
Vector2D* setX(double xcoor) {x = xcoor; return this;}
//^--- no reference but pointer ---^
那么你的代码就错了:
Vector2D VV(2,4);
VV.setX(1).setY(5);
// ^ --------- error object has no class type, you cannot use .
";正确的";将是CCD_ 2。但是,没有理由使用指针。我知道这对初学者来说可能很难理解,因为在教学中指针被过度使用了。大多数时候,您不关心对象的指针或内存地址。
您返回*this
,因为这就是启用链接所需的全部内容。调用者有一个VV
对象,所以您返回的是对该对象的引用,而不是其他对象。