我的基类如下:
class point //concrete class
{
... //implementation
}
class subpoint : public point //concrete class
{
... //implementation
}
如何从点对象转换为子点对象?我已经尝试了以下所有三种方法:
point a;
subpoint* b = dynamic_cast<subpoint*>(&a);
subpoint* b = (subpoint*)a;
subpoint b = (subpoint)a;
这些演员阵容有什么问题?
原文由 CodeKingPlusPlus 发布,翻译遵循 CC BY-SA 4.0 许可协议
你不能;除非
point
有一个转换运算符,或者subpoint
有一个转换构造函数,在这种情况下可以转换对象类型而无需强制转换。如果引用的对象实际上是
subpoint
类型,您可以从point
_引用_(或指针)转换为subpoint
_引用_(或指针):第一个(
static_cast
)更危险;没有检查转换是否有效,所以如果a
不引用subpoint
,那么使用b1
将有未定义的行为。第二个(
dynamic_cast
)更安全,但只有在point
是多态的(即,如果它具有虚函数)时才有效。如果a
引用了不兼容类型的对象,那么它会抛出异常。