Есть конструктор копирования и есть оператор присваивания. Поскольку A != B
, будет вызван оператор присвоения копии.
Краткий ответ: operator =
из класса A, поскольку вы назначаетесь в класс 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
};
Обратите внимание, что это вводит неявное приведение между B и A. Если вы не хотите этого, вы можете объявить конструктор преобразования как explicit
.