我正在尝试上课,但出了点问题。我正在尝试 static_cast<>
, dynamic_cast<>
但我仍然收到错误。我需要一个包含两种类的数组。
class user
{
int value;
user(int valueInit)
{
value = valueInit;
};
int getValue()
{
giá trị trả về;
}
};
class premium : public user
{
int premiumValue;
premium(int valueInt, int premiumValueInit)
{
value = valueInt;
premiumValue = premiumValueInit;
};
};
这里是 chủ yếu()
中的主要代码功能
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++ 有很大的问题。我知道我应该做什么,但我不知道该怎么做。
lý do
你的类型转换 (user)array[0] = u1
的问题在于,从理论上讲,它等同于以下代码:
{
user unnamed_instance = array[0];
unnamed_instance = u1;
}
hiện hữu (T)a = b;
中,将创建一个类型为 T
的未命名临时对象,然后使用 b
的值对其进行初始化.您正在分配给这个未命名的临时对象,而不是 Một
.
Để ý:在本例中为slicing发生,即。 array[0]
中的值,其类型为 premium
,将被切片为 user
.
解决方案
如果您想将 array[0]
中的值视为 user
类型而不引入临时值,则需要使用指针或引用。下面将正确地将 u1
được giao cho array[0]
, giống array[0]
Đúng user
类型一样。
// using a reference
static_cast (array[0]) = u1;
// using a pointer
user * ptr = static_cast (&array[0]);
*ptr = u1;
Tôi là một lập trình viên xuất sắc, rất giỏi!