Posted By: Quasimodo (Quasimodo) on 'CZprogram' Title: Re: C++ Date: Fri Jan 3 13:29:31 2003 > zkusim to znovu: > > struct t{string text; t(string txt):text(txt); t(){};}; > struct v: virtual t{v(string txt):text(txt);v(){};}; > > tohle nepujde zkompilovat, proc? Nezdedi snad 'v' od 't' polozku 'text' typu > string? Ja mel zato, ze pokud dedim, dostanu komplet predka (tedy public > veci, ale to tady odpada - jde o struct) a plus si do toho muzu bastlit > metody specificke pro ten konkretni objekt. Tohle ma ten hacek, ze string text je atribut objektu t. To znamena, ze jeho konstruktor muzes takhle volat jen a pouze z tridy t. Proto: struct t { string text; // atribut teto tridy t(string txt):text(txt){}; // muzu pouzit jeho konstruktor t(){}; // default konstruktor }; Az sem je to v poradku. Muzu udelat tohle: struct v: virtual t { v(string txt):t(txt){}; // namisto default konstruktoru t() volam // t(txt), ktery zavola text(txt) v(){}; }; Ale ani nahodou NEMUZU udelat: struct v: virtual t { v(string txt):text(txt){}; // zavolal se default konstruktor t(), ktery // m.j. i kdyz jsi to tam nenapsal, musel // udelat text(). A na tento atribut text uz // podruhe konstruktor zavolat nemuzes. v(){}; }; Doufam, ze se nepletu, ani jsem si to nezkusil prelozit, a taky doufem, ze jsem to napsal srozumitelne. - Clovek je nejpomalejsi zname zarizeni typu I/O. Quasimodo