原因:在进行赋值的时候会调用构造函数,比如int a, a = 5. 会执行两次构造函数,如果没重载"=",会调用默认的;如果重载了会调用重载后的。如果对"="用友元函数进行重载,友元函数只是类的“朋友”,不是类的成员函数,便会出现以下情景:程序会出现两种矛盾
1.认为没有重载赋值运算符的成员函数,调用相应的构造函数
2.在全局范围内,又重载了赋值运算符函数,赋值语句正好和这个函数匹配上了,也会去调用这个函数
出现了矛盾
->、[]、()同样也是这样
原因:运算符作为成员函数时,其左侧运算对象必须是运算符所属类的一个对象, 显然 “<<” 不是