1

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

这里调用项目类的构造函数,并通过它传递产品对象。

4

1 回答 1

1

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

这个转换构造函数

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

在这个赋值语句中使用

obj1=obj2;

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

cout<<obj1.a;

a发生这种情况,该类型的临时对象的数据成员所占用的内存item包含零。但总的来说,这不是必需的。

于 2020-05-29T20:00:15.840 回答