例子:
string
a("abc"),
b("abc");
if(this==&other)
//自处是在比较this指针里存的地址和要赋值的other地址是否相同,对于
a
=
a
的情况,这种情况如果执行赋值部分的代码会出错,所以要直接返回,而a
=
b
却能正确的执行
而if(*this==other)
//自处是掉
==
操作符
比较两个string是否相等,如果这样写,那a
=
a,
a
=
b都直接返回,对于a
=
b这种情况,它要将b的值赋值给a,不能直接返回。所以不能比较两个string的值是否相等,而应该他们的比较地址是否相同。这样说可以吗?
因为*this
==
other只是比较两个String类型变量的值是否相等。而且该语句是否合法还取决于你是否重载了==号操作符。
这里重载赋值运算符,比较this和&other的原因是要确保不是自己给自己赋值。即this和&other的值不能一样,一样的话代表自己给自己赋值。
明白了吧?
赋值运算符不能友元重载,只能用类型转换函数,在E类里面增加一个类型转换函数:operator
int
(
){return
this->k;}
嗯,赋值操作符必须是类成员,不过+=操作符可以定义非类成员,类成员定义类型转换可用,而且是唯一方法,楼上高手