Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
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