通过类函数返回引用并在c ++中返回整个对象?

斯蒂芬·斯托伊科夫斯基(Stefan Stojkovski)

CVector类中的运算符重载:

CVector CVector::operator+ (CVector param) {
  CVector temp;
  temp.x = x + param.x;
  temp.y = y + param.y;
  return (temp);
}

并且主要:

CVector a (3,1);
  CVector b (1,2);
  CVector c;
  c = a + b;

因此,按值传递对象,然后创建另一个临时对象。我猜b是按值传递的,a是调用+的值,因此x和y属于a,而pram.x和param.y属于b。返回了temp,并且副本分配运算符将temp的值传递给c?

但是呢:

CVector& CVector::operator= (const CVector& param)
{
  x=param.x;
  y=param.y;
  return *this;
}

并且主要:

a=b;

再次,a调用=,并且b被引用作为const传递(在这种情况下,是否通过值传递是否重要?)这是我感到困惑的地方,属于a的x被分配给be的param.x。那么为什么这个函数不作空,因为x和y可以被该函数访问。返回的内容*这意味着,我知道这是调用该函数的对象的地址,因此*这将是函数本身,但是如果我们返回一个对象,则需要将其分配给某个位置,例如前面的c = temp在temp = a + b之后?CVector&甚至意味着什么,看起来我们不期望CVector类型的对象的地址吗?

换句话说,为什么函数不只是:

void CVector::operator= (const CVector& param)
    {
      x=param.x;
      y=param.y;
    }

??

然后有这个代码

#include <iostream> 
using namespace std;
 class Calc { 
private: 
  int value; 
public: 
  Calc(int value = 0) { this->value = value; } 
  Calc& Add(int x) { value += x; return *this; } 
  Calc& Sub(int x) { value -= x; return *this; } 
  Calc& Mult(int x) { value *= x; return *this; } 
  int GetValue() { return value; } }; 

int main() { 
  Calc cCalc(2); 
  cCalc.Add(5).Sub(3).Mult(4); 
  cout << cCalc.GetValue(); 
  return 0; 
}

现在,如果我从功能中删除了&:

  Calc Add(int x) { value += x; return *this; } 
  Calc Sub(int x) { value -= x; return *this; } 
  Calc Mult(int x) { value *= x; return *this; } 

并使用

Calc cCalc(2)
cCalc.Add(5);
cCalc.Sub(3);
cCalc.Mult(4);

而不是前者,它会产生相同的结果。那么,为什么Calc&returne类型允许链接。

我不仅想知道如何编程,因为面向对象主要是通过模式(必须这样写,如果需要这样的话)来写,而这与必须使用逻辑的结构化编程相反,而且还想知道为什么是这样。和平定义的代码,以及为什么它不是我直觉认为应该的(尽管我只学习编程大约一年)。

谢谢!

学徒

那么为什么这个函数不作空,因为x和y可以被该函数访问。返回什么*这意味着

由于operator=()声明了返回引用,因此return *this;返回对当前对象的引用。这使我们可以链接赋值运算符。例如,

a = b = c;

将调用b.operator=(c);并返回对的引用b然后a由一个等效于的呼叫分配a.operator=(b)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++-更改基类指向的对象(在操作员oveloading函数中返回对基类的引用)

如何通过引用将size_t参数传递给函数并在C编程中返回结果

方法不返回整个对象

如果对象数组中存在对象值,则返回整个对象

从C ++中的函数返回引用

通过引用返回C ++

通过基类将派生对象存储在向量中,并在删除后将其返回给派生对象

laravel map函数为什么从定义的关系中返回整个对象?

PHPSpec:通过引用返回的函数

返回复合模式的Composite对象不会返回整个对象

类与函数返回对象

从数组中的多个中找到百分比并偶然返回整个对象

rspec测试失败:返回整个对象而不是字符串(仅在rspec中)

C ++通过引用在类中传递函数

C ++返回对象的引用

如何连接通过cython返回对对象的引用的c ++函数

在C ++中通过引用返回值

在 C++ 中通过引用返回结果

Typescript如何从嵌套对象Getter返回类函数引用

如何使用返回对象的函数通过引用进行绑定?

mongoose find() 函数不返回整个对象,跳过空字段

如何理解c ++函数中的返回引用?

对从函数返回的临时对象的引用

从函数返回临时对象的引用

如何在对象数组中找到最长的名称,然后将整个对象返回到JavaScript中的控制台?

在PHP类中返回对象

对函数的C ++返回引用的困惑

binary_search通过其成员函数的返回变量查找类对象[c ++]

在C ++中创建具有按引用调用返回值的类函数