Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
6.3. WRACAJC DO KALKULATORA 185<br />
};<br />
double value; // Dla liczb: warto.<br />
Token(char ch) // Tworzy Token ze znaku.<br />
:kind(ch), value(0) { }<br />
Token(char ch, double val) // Tworzy Token ze znaku i wartoci typu double.<br />
:kind(ch), value(val) { }<br />
Nie s to zwyke funkcje skadowe, tylko tzw. konstruktory. Maj tak sam nazw jak ich<br />
typ i su do inicjalizowania (tworzenia) obiektów typu Token. Na przykad:<br />
Token t1('+'); // Inicjacja zmiennej t1 — t1.kind = '+'.<br />
Token t2('8',11.5); // Inicjacja zmiennej t2 — t2.kind = '8' i t2.value = 11.5.<br />
Tekst :kind(ch), value(0) w pierwszym konstruktorze oznacza: „Zainicjuj skadow kind wartoci<br />
ch, a value ustaw na 0”. W drugim konstruktorze znajduje si tekst :kind(ch), value(val),<br />
który oznacza: „Zainicjuj skadow kind wartoci ch, a value ustaw na val”.W obu przypadkach<br />
nie trzeba robi nic wicej, aby utworzy obiekt typu Token, dlatego tre funkcji jest pusta —<br />
{ }. Specjalna skadnia inicjujca (ang. member initializer list — lista wartoci inicjujcych<br />
skadowe), która zaczyna si dwukropkiem, jest uywana tylko w konstruktorach.<br />
Zauwa, e konstruktor nie zwraca wartoci. Dlatego nie trzeba (a nawet nie mona) definiowa<br />
typu zwrotnego konstruktora. Wicej na temat konstruktorów napiszemy w rozdziaach<br />
9.4.2 i 9.7.<br />
6.3.4. Uywanie tokenów<br />
Moe spróbujemy dokoczy nasz kalkulator! Chocia warto by byo najpierw opracowa jaki<br />
plan dziaania. Jak bdziemy wykorzystywa obiekty typu Token w programie? Moemy<br />
wczyta dane wejciowe do wektora takich obiektów:<br />
Token get_token(); // Wczytuje token ze strumienia cin.<br />
vector tok; // Tutaj bdziemy zapisywa tokeny.<br />
int main()<br />
{<br />
while (cin) {<br />
Token t = get_token();<br />
tok.push_back(t);<br />
}<br />
// …<br />
}<br />
Teraz moemy wczyta wyraenie w caoci i dopiero po tym obliczy jego warto. W przypadku<br />
11*12 otrzymamy co takiego:<br />
W strukturze tej moemy znale operator i jego operandy. Gdy to zrobimy, z atwoci wykonamy<br />
dziaanie mnoenia, poniewa liczby 11 i 12 zostay zapisane jako wartoci liczbowe, a nie<br />
acuchy.