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
占用的内存包含零。但一般来说,这是没有必要的。
输出是 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
占用的内存包含零。但一般来说,这是没有必要的。