Cześć, weźmy taki kod:
class A
{
public:
A()
{
DoJob();
}
protected:
virtual void DoJob() = 0;
};
class B : public A
{
public:
B(){};
protected:
virtual void DoJob() override
{
MessageBox(NULL, L"OK", L"", MB_OK);
}
};
Ten kod nie zadziała dlatego, że klasa B w momencie wykonywania konstruktora klasy A nie jest jeszcze w pełni utworzona. Więc w klasie A wywołanie DoJob() wywoła tak naprawdę metodę A::DoJob(), co zakończy się katastrofą.
OK, jest to logiczne. Ale teraz pytanie jest następujące:
Jak spowodować (czy są jakieś patterny, czy dobre rozwiązania), żeby z konstruktora klasy bazowej można było wywołać metodę przesłoniętą z klasy potomnej?