Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
food.h<br />
class CompositeFood : public Food<br />
{<br />
private:<br />
std::vector foods;<br />
public:<br />
CompositeFood (const std::string& name);<br />
CompositeFood (const CompositeFood& food);<br />
void addFoodCopy (const Food* food);<br />
int getFoodCount () const {return foods.size();}<br />
Food* getFood (int i) {return foods[i];}<br />
const Food* getFood (int i) const {return foods[i];}<br />
v<strong>ir</strong>tual Food* clone () const;<br />
v<strong>ir</strong>tual double getPrice () const;<br />
v<strong>ir</strong>tual void print (const std::string& margin = "") const;<br />
};<br />
Atkreipkime d÷mesį, jog sud÷tinio maisto klas÷ net tik perrašo švariai v<strong>ir</strong>tulius<br />
metodus clone <strong>ir</strong> getPrice, bet <strong>ir</strong> pateikia savą v<strong>ir</strong>tualaus metodo print realizaciją:<br />
jame atspausdina <strong>ir</strong> visas sud÷tines savo dalis.<br />
Gal kas nors jau pasteb÷jo, jog CompositeFood susideda iš rodyklių į Food. O mes<br />
juk sak÷me, kad klas÷ Food turi švariai v<strong>ir</strong>tualių metodų, tod÷l ji yra abstrakti klas÷,<br />
<strong>ir</strong> būdama abstrakčia klase negali tur÷ti jokių sukurtų objektų. Reikalas tame, jog<br />
paveld÷jimas susieja klases yra-ryšiu (is-a). T.y. PrimitiveFood yra Food, <strong>ir</strong><br />
CompositeFood <strong>ir</strong>gi yra Food. Arba galime įsivaizduoti, kad PrimitiveFood <strong>ir</strong><br />
CompositeFood turi savyje klasę Food. Programose tai reiškia: ten, kur reikia<br />
rodykl÷s (nuorodos) į bazin÷s klas÷s Food objektus galima perduoti rodykles<br />
(nuorodas) į paveld÷tų klasių PrimitiveFood <strong>ir</strong> CompositeFood objektus.<br />
Šiame pavyzdyje mes turime failus su tais pačiais vardais, kaip <strong>ir</strong> praeitame:<br />
food.h/cpp, selling.h/cpp <strong>ir</strong> main.cpp. Failai selling.h <strong>ir</strong> selling.cpp yra identiški<br />
praeito pavyzdžio bendravardžiams. Faile food.h mes jau mat÷me klasių Food,<br />
PrimitiveFood <strong>ir</strong> CompositeFood aprašus, o atitinkamame realizacijos faile food.cpp<br />
turime metodų apibr÷žimus (kūnus).<br />
Klas÷s Food metoduose mes nepamatysime didesnių naujovių:<br />
48