24.03.2015 Views

13 skyrius - techmat.vgtu.lt

13 skyrius - techmat.vgtu.lt

13 skyrius - techmat.vgtu.lt

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}<br />

system( "pause" );<br />

return 0;<br />

<strong>13</strong>.4 PAVELDIMUMAS IR METODŲ PERKROVIMAS<br />

Nagrinėsime bazinės klasės metodų perrašymą išvestinėje klasėje. Dabar išvestinės klasės<br />

metodų vardai sutampa su bazinės klasės metodų vardais. Kurie metodai bus kviečiami bazinės ir<br />

išvestinės klasių objektams?<br />

6 pavyzdys: steko iš trijų elementų klasė. Stekas – paprasta duomenų struktūra, nedidelio<br />

mato vienmatis masyvas laikinam duomenų saugojimui. Priklausomai nuo to, kokia tvarka į steką<br />

įdedami ir iš jo išimami duomenys, stekai būna įvairių rūšių: FIFO (angl. First In, First Out – pirmas<br />

įėjo, pirmas išėjo), FILO, LIFO ir pan. Čia parašysime steką trims sveikiesiems duomenims saugoti<br />

„paskutinis įėjo, pirmas išėjo“ (LIFO). Tegu turim nesaugią klasę Stack, kuri netikrina, ar stekas<br />

neperpildytas ir ar nėra tuščias. Stekas turi turėti bent du metodus: push duomeniui į steką<br />

(vienamtį masyvą stack) įdėti ir pop – duomeniui iš steko išimti ir grąžinti. Į masyvą įdedamo ir<br />

išimamo elemento vietą masyve žymėsime indeksu top. Klasės funkcionalumą paveldėsime ir<br />

papildysime duomenų įdėjimo ir išėmimo metodais su reikiamomis patikromis – tai bus jau<br />

saugaus steko klasė SafeStack. Masyvo matas Stack klasėje užduodamas konstrukcija enum: tik<br />

taip galima „apgauti“ kompiliatorių ir klasės viduje pranešti konkrečią duomens reikšmę 3.<br />

#include <br />

#include <br />

using namespace std;<br />

//<br />

class Stack{<br />

protected:<br />

enum{ MAX = 3 };<br />

int stack[ MAX ];<br />

int top;<br />

public:<br />

Stack( ): top(-1) { }<br />

//<br />

~Stack( ) { }<br />

//<br />

void push( int var ) { stack[ ++top ] = var; }<br />

int pop( ) { return stack[ top-- ]; }<br />

};<br />

//<br />

class SafeStack: public Stack {<br />

public:<br />

void push( int var ){<br />

if( top >= MAX-1 ){<br />

cout

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

Saved successfully!

Ooh no, something went wrong!