Upresneni: OT: Re: C++ konstruktor a virtualni metoda

Karel Berkovec kber8678 na artax.karlin.mff.cuni.cz
Úterý Prosinec 7 21:15:26 CET 1999




On Tue, 7 Dec 1999, Roman LISZKA wrote:

> Karel Berkovec wrote:
> > 
> >   pochopitelne - k cemu slouzi konstruktor? - preci k praci s virtualnimi
> > metodami ;-) - jak chcete pracovat s necim, o cem jeste nevite, jak se ma
> > chovat?
> > 
> ale v Pascalu (Borlandim), Jave lze volat virtualni metody i z
> konstruktoru (a aspon mne to usnadnuje programovani inicializace
> objektu), takze tato vlastnost konstruktoru plati v C++ a neni obecna.
> 

  to, ze nekdy lze takto pracovat je zpusobeno dvema faktory 
          a) navrhem prekladace (Borland != iso, prip. ANSI C++) 
          b) jazykem samotnym - (do Javy nevidim), v Pascalu neni
vyraznejsiho rozdilu mezi kostruktorem a jinou metodou objektu


 Uprimne receno, puvodne jsem to puvodne odbyl s tim, "ze je to preci
jasne". Faktem je, ze to tak uplne jasne neni. Otazka zni, proc by to
nemelo fungovat - VTM se preci muze vytvorit jiz pred spustenim samotneho
konstruktoru. Kamen urazu ovsem nastava, pokud by si nekdo (ja) troufl
volat onu virtualni metodu jiz v kostruktoru predka. Pak pomalu prestava
byt jasne, kdo je kdo.

------

 Vzhledem k tomu, ze nejsem dostatecnou autoritou, doporucuji napr. C++ od
Stroustrupa str. 597-598. Tam je mj. uvedeno: Clenske fce. se mohou volat
v kostruktorech a destruktorech. Cili se mohou volat i virtualni fce.
Volanou fci. bude ta, ktera je definovana ve vlastni tride nebo v
zakladech, _nikoli_ vsak kazda funkce (*), ktera ji nahrazuje v odvozene
tride. Tim je omezen pristup k nesestrojenym objektum. Ucinek volani ciste
virtualni fce. pro objekt, ktery se vytvari, z konstruktoru, pokud neni
pouzita explicitni kvalifikace, neni definovany. 



karel.


(*) v knizce je napsano tridy, ale to zjevne nedava smysl ;-(




Další informace o konferenci Linux