向上转换和向下转换跳过C ++中的层次结构?

时间:2019-01-29 14:22:36

标签: c++ casting

我已经搜索了这个特定问题,但找不到它,所以在这里。通过跳过中间的类来进行向上转换或向下转换是否可以?

示例代码-

class Base { }
class Derived : public Base { }
class DerivedOfDerived : public Derived { }
class DerivedOfDOD : public DerivedOfDerived { }

int main()
{
    DerivedOfDOD *dodod = new DerivedOfDOD();
    Base *b = static_cast<Base *>(dodod);
    Derived *d = static_cast<Derived *>(b);
    back_to_b = static_cast<Base *>(d);
    DerivedOfDerived *dod = static_cast<DerivedOfDerived *>(back_to_b);
    delete dodod;
}

这是有效的代码吗?并对编译器如何管理地址以及这种类型的转换的解释将非常感激。

1 个答案:

答案 0 :(得分:1)

  

跳过中间的类可以进行向上转换还是向下转换?

是的

  

这是有效的代码吗?

是的。 (如果我们忽略内存泄漏)

P.S。上载是隐式的,因此Base *b = dodod;就足够了。