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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PrimitiveFood <strong>ir</strong> CompositeFood paveldi (turi savyje) visus bazin÷s klas÷s Food<br />

laukus (duomenis <strong>ir</strong> metodus). Pavyzdžiui, tiek paprasti, tiek <strong>ir</strong> sud÷tiniai maisto<br />

produktai turi pavadinimą (name). Tod÷l pavadinimas saugomas bazin÷je klas÷je<br />

Food, o išvestin÷s klas÷s PrimitiveFood <strong>ir</strong> CompositeFood jį paveldi iš klas÷s Food.<br />

Žodelis v<strong>ir</strong>tual žymi polimorfinius metodus. V<strong>ir</strong>tualūs metodai gali būti perrašyti<br />

paveld÷tose klas÷se. Pavyzdžiui, paprasti produktai savyje turi kainą, o sud÷tiniai<br />

produktai jos nesaugo savyje – jie apskaičiuoja kainą v<strong>ir</strong>tualaus metodo getPrice<br />

viduje sumuodami sud÷tinių dalių kainas. Kadangi bazin÷je klas÷je Food mes iš viso<br />

negalime pateikti prasmingos metodo getPrice realizacijos, tai jis pažym÷tas kaip<br />

“švariai v<strong>ir</strong>tualus” pabaigoje pr<strong>ir</strong>ašant "= 0". Švariai v<strong>ir</strong>tualūs metodai neturi jokio<br />

kūno (realizacijos), netgi tuščio. Klas÷, kuri turi bent vieną švariai v<strong>ir</strong>tualų metodą<br />

vadinama abstrakčia klase. Mes negalime kurti abstrakčios klas÷s objektų.<br />

Abstrakčios klas÷s visuomet turi išvestines klases, kurios pateikia trūkstamas švariai<br />

v<strong>ir</strong>tualių metodų realizacijas.<br />

Metodas print turi vienintelį parametrą margin (parašt÷) su reikšme pagal<br />

nutyl÷jimą. Tokį metodą galime kviesti su vienu parametru arba be parametrų,<br />

tuomet bus perduota reikšm÷ pagal nutyl÷jimą.<br />

Ats<strong>ir</strong>ado papildomas konstruktorius, priimantis vienintelį argumentą - konstantinę<br />

nuorodą į tos pačios klas÷s objektą: Food (const Food& food). Toks konstruktorius<br />

vadinamas kopijavimo konstruktoriumi. Mūsų pavyzdyje jis naudojamas<br />

metoduose clone, kad pagaminti tikslią objekto kopiją.<br />

Klas÷ PrimitiveFood paveldi visus laukus iš bazin÷s klas÷s Food, <strong>ir</strong> pateikia savas<br />

(perrašydama) švariai v<strong>ir</strong>tualių metodų clone <strong>ir</strong> getPrice realizacijas. Čia taip pat<br />

rasime nuosavą kopijavimo konstruktorių. Pats paveld÷jimas yra nusakomas užrašu<br />

“: public Food”:<br />

// food.h<br />

class PrimitiveFood : public Food<br />

{<br />

private:<br />

double price;<br />

public:<br />

PrimitiveFood (const std::string& name, double price);<br />

PrimitiveFood (const PrimitiveFood& food);<br />

};<br />

v<strong>ir</strong>tual Food* clone () const;<br />

v<strong>ir</strong>tual double getPrice () const {return price;}<br />

Sud÷tinio maisto produkto klas÷ CompositeFood turi tik pavadinimą, kurį paveldi iš<br />

klas÷s Food. Visą kitą savyje saugo sud÷tin÷s produkto dalys – kiti klas÷s Food<br />

objektai:<br />

47

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

Saved successfully!

Ooh no, something went wrong!