16.07.2014 Views

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

206 ROZDZIA 6 • PISANIE PROGRAMU<br />

2;<br />

= 2<br />

2+3;<br />

= 5<br />

3+4*5;<br />

= 23<br />

k<br />

W tym momencie mamy ju dobr wstpn wersj programu. Nie jest to jeszcze to, czego<br />

chcielimy, ale stanowi dobr baz do rozszerzania. Co waniejsze, moemy poprawia bdy<br />

i dodawa nowe funkcje, pracujc ju z dziaajcym programem.<br />

6.8. Strumienie tokenów<br />

Zanim przejdziemy do dalszego opisu kalkulatora, przedstawimy implementacj strumienia<br />

Token_stream. Jeli nie dostarczymy poprawnych danych do programu, to nic nam si nie uda.<br />

Strumie ten zaimplementowalimy ju na samym pocztku, ale najpierw chcielimy skupi<br />

si na problemach oblicze w minimalnym rozwizaniu.<br />

Nasz kalkulator przyjmuje na wejciu sekwencj tokenów, np. (1.5+4)*11 z podrozdziau<br />

6.3.3. Potrzebujemy czego takiego, co bdzie wczytywa znaki ze standardowego strumienia<br />

wejciowego i podawa programowi kolejne tokeny, gdy ten o to poprosi. Poza tym zauwa-<br />

ylimy, e program czsto wczytuje o jeden token za duo, a wic musimy wygospodarowa<br />

jakie miejsce, aby przechowa go do póniejszego uytku. Jest to cakowicie normalne. Jeli<br />

wczytujemy wyraenie 1.5+4 od lewej do prawej, skd mamy wiedzie, e liczba 1.5 to ju<br />

caa liczba, jeli nie wczytamy znajdujcego si za ni znaku +? Dopóki go nie zobaczymy,<br />

równie dobrze moemy podejrzewa, e jestemy w trakcie wczytywania liczby 1.55555.<br />

Dlatego potrzebujemy „strumienia”, który zwraca token, gdy go zadamy za pomoc funkcji<br />

get(), i w którym moemy przechowywa nadmiarowe tokeny, zapisujc je tam za pomoc<br />

funkcji putback(). Wszystko w jzyku <strong>C++</strong> ma okrelony typ, dlatego musimy zacz od<br />

zdefiniowania typu Token_stream.<br />

Pewnie zauwaye sowo public w definicji typu Token. Tam nie miao to adnego widocznego<br />

znaczenia. Natomiast w typie Token_stream, o którym teraz mowa, sowo to bdzie miao<br />

wane zastosowanie. W jzyku <strong>C++</strong> typy zdefiniowane przez uytkownika czsto skadaj<br />

si z dwóch czci — interfejsu publicznego (oznaczonego etykiet public:) i prywatnego<br />

(oznaczonego etykiet private:). Chodzi o oddzielenie tego, co jest potrzebne uytkownikowi<br />

do wygodnego korzystania z typu, od implementacji typu, w której uytkownik nie powinien<br />

mie moliwoci grzebania:<br />

class Token_stream {<br />

public:<br />

// interfejs uytkownika<br />

private:<br />

// szczegóy implementacyjne<br />

// (bezporednio niedostpne uytkownikom typu Token_stream)<br />

};<br />

Oczywicie uytkownik i implementator to czsto jedna i ta sama osoba odgrywajca róne<br />

role. Naley jednak zaznaczy, e rozrónienie midzy interfejsem publicznym przeznaczonym

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

Saved successfully!

Ooh no, something went wrong!