gpt4 book ai didi

C++ 继承向下转型

转载 作者:IT老高 更新时间:2023-10-28 22:33:10 29 4
gpt4 key购买 nike

我的基类如下:

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;

这些类型转换有什么问题?

最佳答案

How do I cast from a point object to a subpoint object?

你不能;除非 point 有一个转换运算符,或者 subpoint 有一个转换构造函数,在这种情况下,对象类型可以在不需要强制转换的情况下进行转换。

您可以从 point reference(或指针)转换为 subpoint reference(或指针) , 如果引用的对象实际上是 subpoint 类型:

subpoint s;

point & a = s;
subpoint & b1 = static_cast<subpoint&>(a);
subpoint & b2 = dynamic_cast<subpoint&>(a);

第一个(static_cast)更危险;没有检查转换是否有效,因此如果 a 不引用 subpoint,则使用 b1 将具有未定义的行为。

第二个 (dynamic_cast) 更安全,但仅当 point 是多态的(即,如果它具有虚函数)时才有效。如果 a 引用了不兼容类型的对象,则会抛出异常。

关于C++ 继承向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855018/

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