@DeadMG: В моем исходном коде есть виртуальные методы, я просто убрал их из примера для ясности. Спасибо хоть :
ойка наэтот вопрос что я столкнулся. Рассмотреть возможность:
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
публично, оба броска будут работать.