C++ 需要下推澄清吗
我不太明白如何沮丧。显然我不能这样做C++ 需要下推澄清吗,c++,downcast,C++,Downcast,我不太明白如何沮丧。显然我不能这样做 class myType { }; class otherType : public myType { }; int main() { myType* obj = new myType; otherType* castObj = dynamic_cast<otherType*>(obj); delete obj; } 类myType { }; 类otherType:公共myType { }; int main()
class myType
{
};
class otherType : public myType
{
};
int main()
{
myType* obj = new myType;
otherType* castObj = dynamic_cast<otherType*>(obj);
delete obj;
}
类myType
{
};
类otherType:公共myType
{
};
int main()
{
myType*obj=新的myType;
otherType*castObj=动态_-cast(obj);
删除obj;
}
我遗漏了什么?我认为需要澄清一下 当B类源于A类时,以下情况适用:
- B是a
- A不一定是B
我想这样向我的女朋友解释: 作为一辆汽车意味着它肯定有轮子 有轮子的东西不一定就是汽车 假设我们有课:
class A
及
B类
当然具有A类
的所有特征,可能还有更多,但我们可以通过简单地“移除”它所携带的所有其他东西,将其安全地转换为A类
,
另一方面,这是不正确的:我们不能确定A类
将具有与您试图将其投射到的类相同的特征,在这种情况下B类
。这就是为什么您必须使用动态强制转换
,通知编译器您已经意识到随之而来的风险
如果强制转换成功,则动态\u强制转换将返回类型为new\u type的值。如果强制转换失败,并且new_类型是指针类型,则返回该类型的空指针。如果强制转换失败,并且新的\u类型是引用类型,它将抛出一个与std::bad\u cast类型的处理程序匹配的异常
你试着从“较小”类型转换为“较宽”类型,这并不是贬低,我可以提供更好的类比:作为一只狗,肯定会使它成为一种动物。作为一种动物,它不一定就是一只狗。我有数百万只,但你明白了。现在我在自言自语
class A
Class B: public A