@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 публично, оба броска будут работать.

Ответы на вопрос(2)

Ваш ответ на вопрос