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.
Klas÷ = duomenys + metodai<br />
Žiūrint iš gero programavimo tono pus÷s, programoje food1 yra mažiausiai du prasto<br />
skonio dalykai:<br />
1. funkcija printPrice() d<strong>ir</strong>ba su struktūros Food tipo kintamasiais, tačiau pati<br />
funkcija n÷ra struktūros dalis,<br />
2. funkcijoje main() mes patys kišame nagus prie pieno vardo. Idealiu atveju pats<br />
pienas turi spręsti, ar mes galime keisti jo vardą <strong>ir</strong> ne.<br />
Išspręsime abi problemas aprašydami klasę Food. C++ klas÷ yra C struktūros<br />
sąvokos išpl÷timas. Klas÷je saugomi ne tik duomenys, bet <strong>ir</strong> funkcijos<br />
manipuliuojančios jais. Tokios funkcijos vadinamos metodais. Tiek klas÷s<br />
duomenys (atributai), tiek <strong>ir</strong> klas÷s metodai yra vadinami klas÷s nariais. Klas÷s<br />
tipo kintamieji vadinami objektais.<br />
Klas÷se mes galime vienus narius padaryti apsaugotais (protected), kad iš išor÷s<br />
nebūtų galima jų naudoti, o tik pačios klas÷s metodų viduje, kaip pailiustruota<br />
programoje food2:<br />
// food2.cpp<br />
class Food<br />
{<br />
protected:<br />
string name;<br />
double price;<br />
public:<br />
Food (string name, double price);<br />
string getName () {return name;}<br />
double getPrice () {return price;}<br />
void setPrice (double p) {price = p;}<br />
};<br />
void printPrice (double amount);<br />
Matome, jog klas÷ Food turi tuos pačius duomenų laukus, kaip <strong>ir</strong> ankstesn÷s<br />
programos struktūra Food, tik dar prisid÷jo keletas viešų (public) metodų,<br />
pasiekiamų klas÷s išor÷je. Atkreipkime d÷mesį, jog mes leidome keisti maisto kainą<br />
metodo setPrice() pagalba, bet neleidome keisti maisto vardo. Tiesiog pas<strong>ir</strong>inkome<br />
nerašyti analogiško metodo setName(). Vienos eilut÷s metodai aprašyti <strong>ir</strong> realizuoti<br />
pačiame klas÷s apraše, o didesnieji apibr÷žiami atsk<strong>ir</strong>ai:<br />
Food::Food (string n, double p)<br />
{<br />
25