通过构造函数方法输出的类到类类型转换是 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;
}
这里调用项类的构造函数,并通过它传递产品对象。
程序具有未定义的行为,因为使用的数据成员a
未初始化。
此转换构造函数
item(product &obj)
{
cout<<a;
}
在此赋值语句中使用的
obj1=obj2;
将product
类型的对象obj2
转换为item
类型的对象不会初始化数据成员a
。因此,数据成员具有不确定的值。并且分配给对象obj1
的数据成员a
的不确定值在构造函数和此语句中输出
cout<<obj1.a;
它发生的方式是,数据类型item
的临时对象的数据成员a
占用的内存包含零。但总的来说,这是没有必要的。
相关文章:
- 为什么不;名字在地图上是按顺序排列的吗
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- C++ 基本 CTOR 说明 - 为什么不调用赋值/复制构造函数
- 为什么不递增?(构造函数)
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 为什么不允许使用可变长度数组作为向量元素?
- C++:为什么不调用移动构造函数?
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 为什么不能用常量表达式声明数组?
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- C++ queue.front();为什么不从第一个元素开始呢?
- 为什么不允许这种交叉广播?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 为什么不支持 Xcode 1.5?
- 为什么不能使用带有模板的 lambda
- 为什么不需要在 C++20 中的依赖类型之前指定"typename"?
- C++:如果括号为空,为什么不抛出错误对象?
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?