1、赋值函数写法分析
Test& operator=(const Test &t)
{
if(this != &t)
{
data = t.data;
}
return *this;
}
void operator=(Test t)
{
data = t.data;
}
void main()
{
Test t1(10);
Test t2;
t2 = t1; //在C++代码背后实际等价于t2.operator=(t),然后将t1传给形参t
}
(1)形参中的Test &t 与Test t
如上两种赋值语句的写法,本身都可以运行,没有错误,但是其内部差异以及优缺点很明显,如上述代码,t1给t2赋值过程中,等号实际是一个符号的重载,实际背后是将t1作为参数传递,必将调用拷贝构造函数,这样使得代码效率降低,而使用引用传递,不会给形参t开辟一个临时的空间,而是外面t1的别名,所以不会调用拷贝构造函数。
(2)形参中的const Test 与 Test
为了保护类中的数据,加上const后表明类中的数据不能被修改,不可在该函数内部对Test类的成员数据进行修改。例如t1是一个对象,里面数据都被初始化为0,需要用这个对象给其他同类对象进行赋值,我们希望其他类中数据的初始值也为0,则直接赋值即可,但有人不小心在赋值重载函数中对Test类的数据成员进行了修改,则使用t2 = t1时,对象t2中的数据也将被修改,所