Динамическое снижение частного наследования в частной области

Настройка этого вопроса , с которой я столкнулся. Рассмотрим:

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 публично, оба преобразования будут работать.

18
задан Community 23 May 2017 в 12:16
поделиться