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.

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

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

Saved successfully!

Ooh no, something went wrong!