преобразование класса в тип класса через вывод метода конструктора - 5500, почему не 5555 - PullRequest
0 голосов
/ 29 мая 2020

Вывод 5500, но почему не 5555?

class product {
public:
    int b;
};

class item {
public:
    int a;
    item(product& obj)
    {
        cout << a;
    }
    item() {}
    void display()
    {
        cout << a;
    }
};

int main()
{
    item obj1;
    product obj2;
    obj1.a = 5;
    cout << obj1.a;
    obj1.display();
    obj1 = obj2;
    //object of product class sent into Constructor of item class*
    cout << obj1.a;
    return 0;
}

Здесь вызывается конструктор класса элемента и через него проходит объект продукта.

1 Ответ

1 голос
/ 29 мая 2020

Программа имеет неопределенное поведение, поскольку используемый элемент данных a не инициализирован.

Этот конструктор преобразования

        item(product &obj)
        {
           cout<<a;
        }

, который используется в этом операторе присваивания

obj1=obj2;

для преобразования объекта obj2 типа product в объект типа item не инициализирует член данных a. Таким образом, член данных имеет неопределенное значение. И это неопределенное значение, присвоенное члену данных a объекта obj1, выводится в конструкторе и в этом операторе

cout<<obj1.a;

Это произошло таким образом, что память, занятая элементом данных a временного объекта типа item содержал нули. Но в целом в этом нет необходимости.

...