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

Search the boards