c ++中的赋值运算符

时间:2010-10-02 23:27:47

标签: c++

让我们假设我有一些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;

提前致谢

1 个答案:

答案 0 :(得分:5)

您的第二个代码只会将A *this部分(切片)复制到临时变量中,分配它并将其丢弃。不是很有帮助。

我会将该行写为:

A::operator=(rhs);

这使得它非常清楚它正在调用基类版本。

在模板情况下,Cast-and-assign可能会更好,在这种情况下,您实际上并不知道您的基类是什么,以及它是否有operator=成员或朋友或者是什么。

在那种情况下:

A* basethis = this;
*basethis = rhs;

更容易阅读和理解。