C++ konstruktor a virtualni metoda

Ferdinand Prantl Ferdinand.Prantl na ff.cuni.cz
Středa Prosinec 8 11:58:03 CET 1999


On Wed, Dec 08, 1999 at 12:01:50AM +0100, Ivo Zacek wrote:
> Jan Kurik wrote:
> > 
> >   Ja si vybavuji, ze jsem tentyz problem resil jeste v davnych dobach
> > Turbo - Pascalu od Borlandu, kde se to chovalo stejnym zpusobem. Virtualni
> > metoda v konstruktoru se chovala jako by nebyla virtualni.
> 
> Ale to snad ne. Já mám s TP pár let zkušeností (TP6.0 a BP7.0) a vím, že
> tam to tak nebylo, tj. virtuální metoda se chovala jako virtuální i v
> konstruktoru. (Po přechodu na C++ jsem byl touto změnou lehce šokován,

    Ano - v TP totiz konstruktor nen v pravem slova smyslu kostruktorem.
  Volate si ho totiz sam jako metodu (neco.Init). Skutecny "konstruktor",
  ktery zinicializuje objekt a sestavi tabulku VM se vola interne. Pak
  samozrejme ve vasem konstruktoru (pardon - metode Init) muzete pouzivat
  virtualni metody odvozene tridy.

    V C++ je konstruktorem sepc- metoda, která inicializuje objekt,
  tabulka VM je konstruována až potom - pokud nějaká je v době provádění
  konstruktoru, pak je to ta, kterou dal dohromady konstruktor předka.
  Takže to s virtuálními metodami odvozené třídy moc nezkoušejte ... :-)

    Pokud potřebujete inicializaci s voláním virtuálních metod, udělejte
  to stejně jako v pascalu: zavolejte vzápětí metodu init (), kterou
  si pro třídu vytvoříte. Sice o řádek kódu a jednu metodu navíc, ale v TP
  byste volal Init taky ...


    Ferda Prantl


-- 

   "Jen ve svych snech jsme svobodni. Po zbytek zivota potrebujeme penize."
----------------------------------
Ferdinand Prantl
LVT FF UK
e-mail: prantl na ff.cuni.cz
www: http://www.ff.cuni.cz/~prantl
ICQ: 36302930


Další informace o konferenci Linux