关于返回一个构造函数的问题

月光散落 发布于 2016/03/31 21:06
阅读 156
收藏 0
#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() ); }  //返回构造函数 这里都发生了什么????
int geta(){return a;}
};
int main()
{
exa c1(2),c2;
c2.Add(c1);
cout << c2.geta() << endl;
return 0;

}

谢谢,谢谢

加载中
0
木兰宿莽
木兰宿莽
首先,Add是个成员函数,形参为类exa,因此一旦调用Add函数则传入类obj,调用默认构造函数拷贝一份obj,接着进入到函数体内,调用exa(int b)这个构造函数,b就是类私有成员a与obj调用的geta函数返回的a值的和,然后exa的私有成员a被赋值,接着返回一个暂时的类exa,Add调用完之后,这个exa也就完成了使命了。从这里可以看出,Add前前后后调用了三次构造函数,这就是为什么推荐用引用的原因
月光散落
月光散落
回复 @木兰宿莽 : 但是最后的运行结果显示C2的a还是0,不是2,这个是为什么?
木兰宿莽
木兰宿莽
回复 @月光散落 : 类和对象是不同的概念,不是返回构造函数,是返回由那个构造函数构造出的具体的类,明白?
月光散落
月光散落
为什么返回一个暂时的类exa呢?构造函数没有返回类型,return一个没有返回值的构造函数?还是想不太通。
返回顶部
顶部