如果我有两个A和B类,我做A = B,调用赋值构造函数? A级或B级的那个?
答案 0 :(得分:6)
有复制构造函数和那里的赋值运算符。从A != B
开始,将调用复制赋值运算符。
简短回答:来自A班的operator =
,因为您已经分配给A班。
答案很长:
A=B
无法使用,因为A
和B
是类类型。
你可能意味着:
A a;
B b;
a = b;
在这种情况下,operator =
会调用class A
。
class A
{
/*...*/
A& operator = (const B& b);
};
将针对以下情况调用转换构造函数:
B b;
A a(b);
//or
B b;
A a = b; //note that conversion constructor will be called here
其中A定义为:
class A
{
/*...*/
A(const B& b); //conversion constructor
};
explicit
。答案 1 :(得分:0)
class abc
{
public:
abc();
~abc();
abc& operator=(const abc& rhs)
{
if(&rhs == this) {
// do never forget this if clause
return *this;
}
// add copy code here
}
abc(const abc& rhs)
{
// add copy code here
}
};
Abc a, b;
a = b; // rhs = right hand side = b
因此在左侧的对象上调用操作符。 但请确保您不会错过if子句。