Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
Paskaitų konspektai - Matematikos ir Informatikos fakultetas ...
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