Проблема заключается в том, что при попытке вернуть объект типа 'V' из этого оператора:
V operator+(int n)
{
return x++ + ++n;
}
То, что вы пытаетесь вернуть здесь в виде 'int', поэтому его следует привести кобъект типа 'V', способ, которым это делается (приведение типа примитива к пользовательскому классу), использует конструкторы. Единственный конструктор, который у вас есть, с двумя необязательными параметрами, который создает проблему, которую он пытаетсясделать объект только из одного параметра, поэтому он отправляется как a = 10, b = 3 (значение по умолчанию), а затем выводится 13.
Я рекомендую использовать несколько конструкторов для решения проблемы, если вы нея не хочу изменять членов класса.
class V
{
int x;
public:
V() { x = 10; }
V(int a) { x = a; }
V(int a, int b) { x = a + b; }
void print() { cout << x; }
V operator+(int n)
{
return x++ + ++n;
}
};
Таким образом, вы можете вызвать конструктор по умолчанию, который устанавливает x в 10, как вы делали ранее, другой конструктор с 1 параметром для приведения из int в'V', и ваш обычный конструктор, который принимает a и b.