[c++] Modyfikator w klasie

mam następujący problem:

mam klasę X zawierającą metodę fill(). Jest ona odpalana m.in. przez konstruktor tej klasy. Teraz tworzę klasę pochodną Y, która dziedziczy X. Chciałbym aby Y dalej zawierała metodę fill(), ale już posiadającą nieco inną definicję. Początkowo chciałem dopisać tylko “virtual” do metody w klasie X i na nowo napisać inną definicję w klasie Y, ale dalej konstruktor korzysta z pierwotnej wersji tej metody. Czy istnieje jakiś modyfikator, który pozwoli na to aby klasa Y korzystała od razu z nowej wersji metody (nawet w odziedziczonym konstruktorze)?

Pokaż jakiś kod.

Jeśli chodzi o coś takiego:

class X {

 public:

	X() { std::cout << "X()\n"; fill(); }

	virtual void fill() { std::cout << "X::fill()\n"; }

};



class Y : public X {

 public:

	Y() { std::cout << "Y()\n"; fill(); }

	void fill() { std::cout << "Y::fill()\n"; }

};



int main()

{

	Y obj;

	return 0;

}

To w konstruktorze Y wywołana zostanie Y::fill. Konstruktor nie jest dziedziczony, a po prostu wywoływany przez klasę podrzędną.

ale konstruktor też muszę dziedziczyć…

class Y: public X

{

      Y()::X()

      {

           fill();

      }

      void fill();

};

Konstruktor klasy X nie może wywołać metody klasy Y, która dziedziczy po X, gdyż obiekt klasy Y jest konstruowany dopiero po wykonaniu konstruktora klasy X. Można to obejść poprzez przekazanie typu klasy dziedziczącej do klasy X i w konstruktorze klasy X rzutować wskaźnik this na typ klasy dziedziczącej, ale trzeba to robić świadomie i liczyć się z ewentualnymi konsekwencjami.