Upcasting и Downcasting пропускают иерархию в C ++? - PullRequest
0 голосов
/ 29 января 2019

Я искал этот конкретный вопрос, но не смог найти его, вот он.Можно ли повышать или понижать, пропуская классы посередине?

Пример кода -

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 голосов
/ 29 января 2019

Можно ли повышать или понижать, пропуская классы в середине?

Да.

Это допустимый код?

Да.(Если мы игнорируем утечку памяти)

PS Upcasting неявный, поэтому достаточно Base *b = dodod;.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...