Я знаю сделку. Компилятор пытается преобразовать один объект в тип других объектов с помощью оператора преобразования. Два способа сделать это. Конструктор (преобразовывает класс в другой) или оператор преобразования. Так что этот это просто проверить, если я в полной мере с концепциями. Код ниже дает ошибку
using namespace std ;
class A
{
int i ;
public:
A(int a=0){this->i=a;}
A operator+(const A& b){
A c ;
return c(this->i+b.i);
}
void show()
{
cout<<i<<endl;
}
};
int main()
{
A a1(1),a2(2),a3;
a3=a2+a1;
a3.show();
return 0;
}
Я предполагаю, что ошибка в операторе +. Когда я пытаюсь присвоить A (i). Нет никакого соответствия для оператора, который мог бы создать A из целого.
Но потом я вижу, что за этим скрывается конструктор A. Он может конвертировать int в A. Предположим, он конвертирует int в A. Затем, вызов становится A (B). Это эквивалентно конструктору копирования. Следовательно, этот вызов должен работать. Но это не так. В целом, я довольно запутался.
Пожалуйста, помогите.