我很困惑为什么在C ++中返回一个构造函数是合法的

时间:2016-04-02 02:16:30

标签: c++

例如:

#include<iostream>
using namespace std;
class exa{
   private:
     int a;
  public:
    exa(int b = 0):a(b){}
    exa Add(exa obj){ return exa(a+obj.geta() ); }  //What happened over     there?
    int geta(){return a;}
};
int main()
{
   exa c1(2),c2;
   c2.Add(c1);
   cout << c2.geta() << endl;
  return 0;
}

1 个答案:

答案 0 :(得分:1)

请注意,您正在将参数传递给构造函数。所以你没有返回构造函数,而是调用它来构造类的对象。因为您没有使用new,所以会在堆栈上分配对象的存储空间。

此处,方法Add返回(按值)类exe的对象。

实际上,在main中使用它的方式,它实际上没有做任何事情,因为c2.Add(c1)的结果会被忽略。

如果你写了c2 = c2.Add(c1),那么新对象将被复制(使用默认作业operator=)到c2,你应该看到输出2