赋值运算符重载
Thing &operator=(const Thing &t){
//判断是否赋值本身
if(*this!=t){
delete name;name=new Thing[strlen(t.name)+1];
strcpy(name,t.name);
//其他变量也得赋值
}
}
拷贝构造
delete name;
name=new Thing[strlen(t.name)+1];
strcpy(name,t.name);
//其他变量也得赋值
}
一 用一个已经存在的对象去创建另一个对象
1:
Thing t;
Thing tt(const Thing &t);
2:
Thing *t=new Thing(t);
二 函数的参数是类类型。传值
Thing t;
fun(t);
void fun(Thing t){}
三 函数的返回值是类类型,返回一个对象
Thing fun(){
return t;
}
四 创建对象时如果用赋值运算符,如果左边的对象是没有创建的而右边是已经创建的
Thing t;
Thing tt=t;
而
Thing t;
Thing tt;
tt=t;
则不会调用拷贝构造 只会调用赋值运算符重载