Настройка этого вопроса , с которой я столкнулся. Рассмотрим:
class A {};
class B : private A {
static void foo();
};
void B::foo(){
B* bPtr1 = new B;
A* aPtr1 = dynamic_cast(bPtr1); // gives pointer
B* bPtr2 = dynamic_cast(aPtr1); // gives NULL
}
Поскольку aPtr1
на самом деле имеет тип B *
, и поскольку у нас есть полный доступ к B
и его наследованию от A
, я ожидал, что оба приведения будут работать. Но они этого не делают; Зачем? Есть ли другой способ добиться такого приведения?
Обратите внимание:
foo ()
не был членом B, оба приведения завершились бы ошибкой. B
] унаследован от A
публично, оба преобразования будут работать.