青岛专业网站建设,html5网页模板代码,青海公司网站建设哪家快,高陵微网站建设拷贝构造函数拷贝构造函数在三种情况下会被使用1.使用对象来初始化对象时2.当函数的形参是对象时3.当函数的返回值为对象时 2,3情况的本质还是1 //Test1.h
#includeiostream
using namespace std;
class ST
{
private:int a;long b;
public:ST(int a0, long b0):a(a),…拷贝构造函数拷贝构造函数在三种情况下会被使用1.使用对象来初始化对象时2.当函数的形参是对象时3.当函数的返回值为对象时 2,3情况的本质还是1 //Test1.h
#includeiostream
using namespace std;
class ST
{
private:int a;long b;
public:ST(int a0, long b0):a(a),b(b){coutObject was built. thisendl;}ST(const ST t); //拷贝构造函数~ST(){coutObject was free. thisendl;}ST operator(const ST t);
};ST ST::operator(const ST t)//赋值函数或者叫号运算符的重载
{coutAssign: this tendl;if(this ! t){this-a t.a;this-b t.b;}return *this;
}
ST::ST(const ST t)
{coutObject was copy. thisendl;this-a t.a;this-b t.b;
}类中无明确的拷贝构造函数时系统会默认的提供一个拷贝构造函数 #includeiostream
#includeTest1.h
using namespace std;ST Get_obj(ST t)//传参时将参数拷贝一份给了函数由于参数是对象所以实际上还是使用对象来初始化对象。所以这是第一次拷贝
{ ST t1(t); //使用对象来初始化对象第二次拷贝return t1; //返回值的生存作用域仅在此函数内传值时传递的是t1的拷贝又一次使用对象初始化对象第三次拷贝
} //所以此函数调用了三次拷贝构造函数
void main()
{ST st(10, 20);ST st1 st;//此处调用了拷贝构造函数①ST st2(st);//此处调用了拷贝构造函数ST st3;st3 st;//此处调用的是赋值语句②cout##########################endl;ST st4 Get_obj(st);//此过程共调用三次拷贝构造函数看起来st4的初始化也得使用拷贝构造实则不然由于Get_obj()方法返回的已经是一个被拷贝构造的临时对象其可以直接为st4赋值而不需要再次拷贝构造
}①和②看起来虽然都是使用对象为对象赋值但是其不同点在于①中st1直接使用对象初始化所以其调用的就是拷贝构造 ②时st3先进行了初始化再用st赋值因此其调用的就是赋值语句。 运行结果 转载于:https://www.cnblogs.com/area-h-p/p/10320506.html