31.12.2014 Views

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!