gpt4 book ai didi

c++ - 类型转换后未初始化变量

转载 作者:行者123 更新时间:2023-11-28 07:01:09 26 4
gpt4 key购买 nike

我正在尝试上课,但出了点问题。我正在尝试 static_cast<> , dynamic_cast<>但我仍然收到错误。我需要一个包含两种类的数组。

class user
{
int value;
user(int valueInit)
{
value = valueInit;
};

int getValue()
{
return value;
}

};

class premium : public user
{
int premiumValue;
premium(int valueInt, int premiumValueInit)
{
value = valueInt;
premiumValue = premiumValueInit;
};
};

这里是 main() 中的主要代码功能

user fUser(10);
premium fPremium(20, 5);

premium *array = new premium[2];

(user)array[0] = u1;
array[1] = p1;

cout << "Value: " << array[0].getValue() << endl; //incorrect/random value
cout << "Value: " << array[1].getValue() << endl; //correct value

通常我使用 java,所以我对 c++ 有很大的问题。我知道我应该做什么,但我不知道该怎么做。

最佳答案

原因

你的类型转换 (user)array[0] = u1 的问题在于,从理论上讲,它等同于以下代码:

{
user unnamed_instance = array[0];
unnamed_instance = u1;
}

(T)a = b; 中,将创建一个类型为 T 的未命名临时对象,然后使用 b 的值对其进行初始化.您正在分配给这个未命名的临时对象,而不是 a

注意:在本例中为slicing发生,即。 array[0] 中的值,其类型为 premium,将被切片为 user


解决方案

如果您想将 array[0] 中的值视为 user 类型而不引入临时值,则需要使用指针或引用。下面将正确地将 u1 分配给 array[0],就像 array[0]user 类型一样。

// using a reference 

static_cast<user&> (array[0]) = u1;

// using a pointer

user * ptr = static_cast<user*> (&array[0]);
*ptr = u1;

关于c++ - 类型转换后未初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com