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