Wydaje mi się że program powinien wyświetlać 123, ale wyświetla 0
Wyświetla zero przez przypadek, gdyż zmienna Bazowa::value nie jest zainicjowana i to co widzisz to przypadkowe wartości/śmieci znajdujące się akurat w pamięci. Zmień na:
class Bazowa
{
public:
int value {0};
};
Co do istoty pytania, zmienna Pochodna ::value jest zmienną przysłoniętą w stosunku do Bazowa::value
Stąd:
Pochodna p(123);
cout << p.value << endl; // wyswietli 123
cout << p.Bazowa::value << endl; // wyswietli 0
Dalej, próbujesz używać wskaźnika do klasy Bazowa,
Bazowa *b = &p;
w którym wskaźnik jest ustawiony na obiekt utworzony na stosie, czego należy unikać jak ognia, gdyż obiekty te mają z reguły krótki czas istnienia i bardzo prawdopodobna jest sytuacja w której wskaźnik ustawiony będzie na adres nie istniejącego już obiektu. Najlepiej jest w ogóle nie mieszać wskaźników w taki sposób.