Wywołanie przesłoniętej funkcji z konstruktora klasy bazowej

Odpowiedz Nowy wątek
2015-02-21 22:21
0

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?

edytowany 1x, ostatnio: Juhas, 2015-02-21 22:22

Pozostało 580 znaków

2015-02-21 22:39

Nie można tak zrobić, bo na poziomie konstruktora klasy bazowej obiekt na rzecz, którego wołany jest konstruktor nie jest jeszcze typu klasy pochodnej.

Pozostało 580 znaków

2015-02-21 22:40
0

I nie ma żadnego obejścia takiej sytuacji?

Pozostało 580 znaków

2015-02-21 22:43
0

Jest, wołanie metod wirtualnych zaraz po tym jak obiekt zostanie stworzony.

Pozostało 580 znaków

2015-02-22 22:00
0

Zgadzam się z @Satirev. Chcesz za dużo wykonać podczas konstrukcji.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0