让我们假设我有一些A类并从中派生出B:
我想为B写operator=
(我假设我的A班有operator=
)
正确的方法:
B& B::operator=(const B& rhs)
{
if(this == &rhs) return *this;
((A&) *this) = rhs; //<-question
//some other options
return *this
}
如果我写
,会有什么不同((A) *this) = rhs;
提前致谢
答案 0 :(得分:5)
您的第二个代码只会将A
*this
部分(切片)复制到临时变量中,分配它并将其丢弃。不是很有帮助。
我会将该行写为:
A::operator=(rhs);
这使得它非常清楚它正在调用基类版本。
在模板情况下,Cast-and-assign可能会更好,在这种情况下,您实际上并不知道您的基类是什么,以及它是否有operator=
成员或朋友或者是什么。
在那种情况下:
A* basethis = this;
*basethis = rhs;
更容易阅读和理解。