Программа имеет неопределенное поведение, поскольку используемый элемент данных a
не инициализирован.
Этот конструктор преобразования
item(product &obj)
{
cout<<a;
}
, который используется в этом операторе присваивания
obj1=obj2;
для преобразования объекта obj2
типа product
в объект типа item
не инициализирует член данных a
. Таким образом, член данных имеет неопределенное значение. И это неопределенное значение, присвоенное члену данных a
объекта obj1
, выводится в конструкторе и в этом операторе
cout<<obj1.a;
Это произошло таким образом, что память, занятая элементом данных a
временного объекта типа item
содержал нули. Но в целом в этом нет необходимости.