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