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

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

本文关键字:5500 为什么不 5555 类型转换 方法 输出 构造函数      更新时间:2023-10-16

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

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

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

此转换构造函数

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

在此赋值语句中使用的

obj1=obj2;

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

cout<<obj1.a;

它发生的方式是,数据类型item的临时对象的数据成员a占用的内存包含零。但总的来说,这是没有必要的。