class 到 class 通过构造方法输出的类型转换是 5500 为什么不是 5555

class to class type conversion through constructor method output is 5500 why not 5555

输出是 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;
}

此处调用项目 class 的构造函数并传递产品对象。

程序有未定义的行为,因为使用的数据成员 a 未初始化。

这个转换构造函数

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

在这个赋值语句中使用的

obj1=obj2;

product类型的对象obj2转换为item类型的对象不会初始化数据成员a。所以数据成员有一个不确定的值。并且这个分配给对象 obj1 的数据成员 a 的不确定值在构造函数和这个语句中输出

cout<<obj1.a;

发生这种情况,item 类型的临时对象的数据成员a 占用的内存包含零。但一般来说,这是没有必要的。