C ++ Assignment构造函数

时间:2012-01-08 14:15:07

标签: c++ copy-constructor assignment-operator

如果我有两个A和B类,我做A = B,调用赋值构造函数? A级或B级的那个?

2 个答案:

答案 0 :(得分:6)

有复制构造函数和那里的赋值运算符。从A != B开始,将调用复制赋值运算符。

简短回答:来自A班的operator =,因为您已经分配给A班。

答案很长:

A=B无法使用,因为AB是类类型。

你可能意味着:

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
};

请注意,这会在B和A之间引入隐式转换。如果您不想要,则可以将转换构造函数声明为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子句。