You are on page 1of 43

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

C++ bez obaw


Autor: Brian Overland
Tumaczenie: ukasz Suma
ISBN: 83-246-0410-3
Tytu oryginau: C++ Without Fear:
A Beginners Guide That Makes You Feel Smart
Format: B5, stron: 520

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl

Rozpocznij przygod z programowaniem


Poznaj elementy jzyka C++.
Naucz si przetwarza dane tekstowe i liczbowe.
Opanuj zasady programowania obiektowego.
C++ to jzyk programowania wykorzystywany do wielu zada. Programici stosuj go
do tworzenia aplikacji uytkowych, gier, a nawet czci systemw operacyjnych.
Moe wic wydawa si, e opanowanie zasad programowania w tym jzyku
przekracza moliwoci przecitnego czowieka. Tak jednak nie jest programowanie
to nie wiedza tajemna, dostpna jedynie dla wybranych, a programici znajcy C++
nie s nadludmi. Z odpowiedni pomoc mona bez kopotw zdoby wiedz
o wszystkich sztuczkach i ciekawostkach C++, a nauka programowania w tym jzyku
nie powinna sprawi Ci problemw.
Ksika C++ bez obaw moe by Twoim asystentem, gdy bdziesz si uczy
programowania w jzyku C++. Dziki niej przekonasz si, e opanowanie tej sztuki
ley w Twoim zasigu. Znajdziesz w niej omwienie elementw C++ zilustrowane
praktycznymi przykadami. Dowiesz si, z czego zbudowany jest program w C++
i jak sprawi, aby kod rdowy sta si aplikacj moliw do uruchomienia na Twoim
komputerze. Przeczytasz o przetwarzaniu danych, operacjach na plikach, sortowaniu,
obliczeniach matematycznych i programowaniu obiektowym. Poznasz wiele
przydatnych zagadnie zwizanych z tworzeniem oprogramowania.
Struktura programu w C++
Wywietlanie danych na ekranie
Typy danych
Ptle i instrukcje warunkowe
Korzystanie ze wskanikw
Operacje na plikach
Programowanie obiektowe
Poszerz swoje moliwoci, programuj w jzyku C++

Wstp ............................................................................................ 13
Po co nowa ksika o jzyku C++? ..................................................................................13
Co nowego jest jeszcze w tej ksice? .............................................................................14
Wiele cieek nauczania. Co jest dla Ciebie najlepsze? ..................................................15
A co, jeli masz ju pewne podstawowe wiadomoci na temat programowania? ...........16
Czego w tej ksice nie ma? ............................................................................................16
Dlaczego warto zaczyna nauk jzyka C++? .................................................................17
Aby rozpocz ..............................................................................................................18
Sztuczki i chwyty. Na co powiniene uwaa? ................................................................19

Rozdzia 1. Twoje pierwsze programy w C++ ..................................................... 21


Myle jak programista ....................................................................................................21
Komputery robi tylko to, co im kaesz ....................................................................21
Okrelanie, co ma robi program ...............................................................................22
Pisanie odpowiednich wyrae C++ ..........................................................................23
Przegld kilku specjalistycznych definicji .................................................................24
Co wyrnia jzyk C++? ..................................................................................................27
Ciekawostka Co z Jav i C#? ................................................................................28
Tworzenie programu w jzyku C++ ................................................................................29
Wprowadzanie wyrae tworzcych program ...........................................................30
Budowanie programu (kompilowanie i czenie) ......................................................30
Testowanie programu .................................................................................................31
Poprawianie w miar potrzeby ...................................................................................32
Instalowanie Twojego wasnego kompilatora ..................................................................33
Przykad 1.1. Wywietlanie komunikatu ..........................................................................33
Jeli uywasz rodowiska RHIDE .............................................................................34
Jeli uywasz Microsoft Visual Studio ......................................................................35
Jak to dziaa? ..............................................................................................................36
wiczenia ...................................................................................................................37
Ciekawostka Co z wyraeniami #include i using? ................................................38
Przechodzenie do kolejnej linii wywietlania ..................................................................39
Przykad 1.2. Wywietlanie wielu linii ............................................................................39
Jak to dziaa? ..............................................................................................................40
wiczenia ...................................................................................................................41
Ciekawostka Co to jest acuch tekstowy? ............................................................42
Przechowywanie danych zmienne w C++ ..................................................................42
Wprowadzenie do typw danych .....................................................................................44
Ciekawostka Dlaczego podwjna precyzja zamiast pojedynczej? ........................45

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

C++ bez obaw


Przykad 1.3. Konwertowanie temperatur ........................................................................46
Jak to dziaa? ..............................................................................................................47
Wariacje na temat przykadu .....................................................................................49
wiczenia ...................................................................................................................51
Sowo na temat nazw zmiennych i sw kluczowych ......................................................51
wiczenie ...................................................................................................................52
Podsumowanie rozdziau 1. ..............................................................................................52

Rozdzia 2. Decyzje, decyzje ............................................................................. 55


Najpierw jednak kilka sw na temat typw danych ........................................................55
Ciekawostka Dla programistw znajcych C .......................................................59
Podejmowanie decyzji w programach ..............................................................................59
Instrukcje if oraz if-else ....................................................................................................60
Ciekawostka Po co dwa operatory (= i ==)? .......................................................62
Przykad 2.1. Nieparzysty czy parzysty? .........................................................................63
Jak to dziaa? ..............................................................................................................64
Optymalizowanie programu .......................................................................................65
wiczenie ...................................................................................................................66
Podstawy dziaania ptli ...................................................................................................66
Ciekawostka Nieskoczone zaptlenie ..................................................................70
Przykad 2.2. Wywietlanie liczb od 1 do N ....................................................................70
Jak to dziaa? ..............................................................................................................71
wiczenia ...................................................................................................................72
Prawda i fasz w C++ .......................................................................................................72
Ciekawostka Typ danych bool ...............................................................................73
Operator inkrementacji (++) ............................................................................................74
Polecenia kontra wyraenia ..............................................................................................75
Wprowadzenie do algebry Boolea (ukadw logicznych) ..............................................76
Ciekawostka Czym jest warto prawda (true)? ..........................................78
Przykad 2.3. Sprawdzanie wieku ludzi ...........................................................................78
Jak to dziaa? ..............................................................................................................79
wiczenie ...................................................................................................................79
Wprowadzenie do biblioteki math ...................................................................................79
Przykad 2.4. Sprawdzanie, czy warto jest liczb pierwsz ..........................................80
Jak to dziaa? ..............................................................................................................82
Optymalizowanie programu .......................................................................................83
wiczenie ...................................................................................................................83
Podsumowanie rozdziau 2. ..............................................................................................84

Rozdzia 3. Wygodna i wszechstronna instrukcja for .......................................... 87


Ptle opracowane w celu zliczania ...................................................................................88
Wprowadzenie do ptli for ...............................................................................................89
Worek z przykadami .......................................................................................................90
Ciekawostka Czy ptla for zawsze zachowuje si tak samo jak while? .................91
Przykad 3.1. Wywietlanie kolejnych liczb naturalnych od 1 do N przy uyciu ptli for ....92
Jak to dziaa? ..............................................................................................................92
wiczenie ...................................................................................................................93
Bloki polece w ptli for ..................................................................................................93
Deklarowanie zmiennych sterujcych ptl w locie .....................................................94
Przykad 3.2. Sprawdzanie, czy warto jest liczb pierwsz, z wykorzystaniem ptli for ..95
Jak to dziaa? ..............................................................................................................96
wiczenie ...................................................................................................................98
Porwnanie jzykw instrukcja for w jzyku Basic ...................................................99
Podsumowanie rozdziau 3. ............................................................................................100

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

Spis treci

Rozdzia 4. Funkcje wiele jest wywoywanych ............................................. 103


Pojcie funkcji ................................................................................................................103
Wywoania funkcji i przepyw sterowania w programie ...............................................105
Podstawy korzystania z funkcji ......................................................................................107
Krok pierwszy: deklaracja (prototyp) funkcji ..........................................................108
Krok drugi: definicja funkcji ...................................................................................109
Krok trzeci: wywoanie funkcji ...............................................................................110
Przykad 4.1. Funkcja wyznaczajca liczb trjktn ....................................................111
Jak to dziaa? ............................................................................................................112
Optymalizowanie programu .....................................................................................113
wiczenia .................................................................................................................114
Przykad 4.2. Funkcja sprawdzajca, czy podana warto jest liczb pierwsz ............115
Jak to dziaa? ............................................................................................................116
wiczenia .................................................................................................................118
Zmienne lokalne i globalne ............................................................................................118
Funkcje rekurencyjne .....................................................................................................120
Przykad 4.3. Najwikszy wsplny dzielnik (NWD) .....................................................121
Jak to dziaa? ............................................................................................................124
wiczenia .................................................................................................................125
Przykad 4.4. Rozkadanie liczb na czynniki pierwsze ..................................................125
Jak to dziaa? ............................................................................................................127
Ciekawostka Dla matematycznych oszoomw ...................................................129
wiczenia .................................................................................................................130
Przykad 4.5. Generator liczb losowych .........................................................................130
Jak to dziaa? ............................................................................................................131
wiczenie .................................................................................................................133
Podsumowanie rozdziau 4. ............................................................................................133

Rozdzia 5. Tablice znamy ich liczb ........................................................... 135


Pierwsze spojrzenie na tablice w jzyku C++ ................................................................135
Inicjalizowanie tablic .....................................................................................................137
Indeksowanie rozpoczynajce si od zera ......................................................................138
Ciekawostka Dlaczego uywa indeksw rozpoczynajcych si od zera? ..........139
Przykad 5.1. Wywietlanie elementw .........................................................................139
Jak to dziaa? ............................................................................................................140
wiczenia .................................................................................................................141
Przykad 5.2. Jak bardzo losowe s liczby losowe? .......................................................141
Jak to dziaa? ............................................................................................................144
wiczenia .................................................................................................................145
acuchy znakowe i tablice acuchw znakowych ......................................................146
Przykad 5.3. Krupier nr 1 ..............................................................................................147
Jak to dziaa? ............................................................................................................149
wiczenie .................................................................................................................150
Przykad 5.4. Krupier nr 2 ..............................................................................................150
Jak to dziaa? ............................................................................................................151
wiczenie .................................................................................................................153
Przykad 5.5. Krupier nr 3 ..............................................................................................153
Jak to dziaa? ............................................................................................................155
Optymalizowanie programu .....................................................................................156
wiczenie .................................................................................................................157
Sowo do dociekliwych ..................................................................................................158
Tablice dwuwymiarowe witamy w wiecie macierzy ...............................................159
Podsumowanie rozdziau 5. ............................................................................................160

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

C++ bez obaw

Rozdzia 6. Wskaniki sposb na uchwycenie danych .................................. 163


Pojcie wskanika ..........................................................................................................164
Ciekawostka Jak naprawd wygldaj adresy? ..................................................165
Deklarowanie i uywanie wskanikw ..........................................................................167
Przykad 6.1. Funkcja podwajajca ................................................................................169
Jak to dziaa? ............................................................................................................170
wiczenia .................................................................................................................172
Zamiana wartoci, czyli kolejna funkcja wykorzystujca wskaniki ............................172
Przykad 6.2. Program sortujcy zawarto tablicy .......................................................174
Jak to dziaa? ............................................................................................................177
wiczenia .................................................................................................................179
Arytmetyka wskanikw ................................................................................................179
Wskaniki i przetwarzanie elementw tablic .................................................................182
Przykad 6.3. Zerowanie elementw tablicy ..................................................................184
Jak to dziaa? ............................................................................................................184
Optymalizowanie programu .....................................................................................185
wiczenia .................................................................................................................187
Podsumowanie rozdziau 6. ............................................................................................187

Rozdzia 7. acuchy znakowe analizowanie tekstu ...................................... 189


Przechowywanie tekstu na komputerze .........................................................................190
Ciekawostka W jaki sposb komputer tumaczy kody programw? ....................190
Mam tekst, czy go nie mam? ..........................................................................................192
Funkcje pozwalajce na dziaania na acuchach znakowych .......................................193
Przykad 7.1. Budowanie acuchw znakowych ..........................................................195
Jak to dziaa? ............................................................................................................196
wiczenia .................................................................................................................198
Ciekawostka Co z tymi sekwencjami specjalnymi? .............................................198
Pobieranie tekstu z wejcia ............................................................................................199
Przykad 7.2. Pobieranie liczby ......................................................................................202
Jak to dziaa? ............................................................................................................203
wiczenie .................................................................................................................204
Przykad 7.3. Konwertowanie tekstw na wielkie litery ................................................204
Jak to dziaa? ............................................................................................................205
wiczenia .................................................................................................................206
Pojedyncze znaki kontra acuchy znakowe ..................................................................206
Przykad 7.4. Analizowanie danych wejciowych .........................................................208
Jak to dziaa? ............................................................................................................209
wiczenia .................................................................................................................212
Nowa klasa acuchw znakowych w C++ ...................................................................213
Zapewnienie moliwoci obsugi klasy string .........................................................214
Deklarowanie i inicjalizowanie zmiennych typu string ...........................................215
Korzystanie ze zmiennych typu string .....................................................................215
Wejcie i wyjcie .....................................................................................................217
Przykad 7.5. Budowanie acuchw znakowych za pomoc zmiennych typu string ...217
Jak to dziaa? ............................................................................................................218
wiczenia .................................................................................................................219
Inne operacje na danych typu string ...............................................................................219
Podsumowanie rozdziau 7. ............................................................................................221

Rozdzia 8. Pliki elektroniczne magazyny .................................................... 225


Wprowadzenie do obiektw strumieni plikw ...............................................................226
Jak odwoywa si do plikw na dysku? .......................................................................228
Przykad 8.1. Zapisywanie tekstu w pliku ......................................................................229
Jak to dziaa? ............................................................................................................230
wiczenia .................................................................................................................231

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

Spis treci

9
Przykad 8.2. Wywietlanie zawartoci pliku tekstowego .............................................232
Jak to dziaa? ............................................................................................................233
wiczenia .................................................................................................................234
Pliki tekstowe kontra pliki binarne .............................................................................234
Ciekawostka Czy pliki binarne s w rzeczywistoci bardziej binarne
od tekstowych? ......................................................................................................237
Wprowadzenie do operacji binarnych ............................................................................238
Przykad 8.3. Bezporedni zapis danych do pliku ..........................................................240
Jak to dziaa? ............................................................................................................242
wiczenia .................................................................................................................243
Przykad 8.4. Bezporedni odczyt danych z pliku .........................................................243
Jak to dziaa? ............................................................................................................245
wiczenia .................................................................................................................245
Podsumowanie rozdziau 8. ............................................................................................246

Rozdzia 9. Niektre z zaawansowanych technik programistycznych ................ 249


Argumenty linii polece .................................................................................................250
Przykad 9.1. Wywietlanie zawartoci pliku o nazwie podanej w linii polece ...........251
Jak to dziaa? ............................................................................................................253
wiczenia .................................................................................................................253
Przeadowanie funkcji ....................................................................................................254
Ciekawostka Przeadowanie i OOPS ..................................................................255
Przykad 9.2. Wywietlanie rnych rodzajw tablic ....................................................256
Jak to dziaa? ............................................................................................................257
wiczenie .................................................................................................................258
Ptla do-while .................................................................................................................258
Wyraenie switch-case ...................................................................................................260
Korzystanie z wielu moduw ........................................................................................261
Obsuga wyjtkw ..........................................................................................................265
Wyjtkom powiedz: Dzie dobry! .......................................................................265
Obsuga wyjtkw: prba pierwsza .........................................................................266
Wprowadzenie do obsugi wyjtkw za pomoc instrukcji try-catch .....................267
Przykad 9.3. Obsuga wyjtkw przy obliczaniu NWD ...............................................270
Jak to dziaa? ............................................................................................................271
wiczenie .................................................................................................................272
Ciekawostka Czy mona korzysta z wielu blokw try-catch? ............................272
Podsumowanie rozdziau 9. ............................................................................................273

Rozdzia 10. Orientowanie si na obiekty .......................................................... 275


Dlaczego orientowa si obiektowo? .............................................................................276
Parser acuchw znakowych ........................................................................................277
Obiekty kontra klasy ......................................................................................................279
Inny przykad: klasa Ulamek ..........................................................................................279
Tworzenie i niszczenie obiektw ...................................................................................280
Dziedziczenie .................................................................................................................281
Tworzenie wsplnych interfejsw .................................................................................283
Polimorfizm prawdziwa niezaleno obiektw .......................................................285
Polimorfizm i funkcje wirtualne ....................................................................................287
Ciekawostka Polimorfizm i tradycyjne jzyki programowania ...........................288
A co z wielokrotnym wykorzystywaniem kodu? ...........................................................289
Podsumowanie rozdziau 10. ..........................................................................................291

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

10

C++ bez obaw

Rozdzia 11. Klasa Ulamek ............................................................................... 293


Punkt prosta klasa ......................................................................................................293
Ciekawostka Dla programistw uywajcych jzyka C struktury i klasy .......295
Teren prywatny tylko dla swoich, czyli rzecz o ochronie danych ............................296
Przykad 11.1. Testowanie klasy Punkt .........................................................................298
Jak to dziaa? ............................................................................................................299
wiczenia .................................................................................................................300
Wprowadzenie klasy Ulamek .........................................................................................300
Funkcje inline .................................................................................................................303
Znajdowanie najwikszego wsplnego dzielnika ..........................................................305
Znajdowanie najmniejszej wsplnej wielokrotnoci ......................................................307
Przykad 11.2. Funkcje pomocnicze klasy Ulamek .......................................................308
Jak to dziaa? ............................................................................................................309
wiczenia .................................................................................................................311
Przykad 11.3. Testowanie klasy Ulamek ......................................................................311
Jak to dziaa? ............................................................................................................313
wiczenie .................................................................................................................314
Ciekawostka Nowy rodzaj dyrektywy #include? .................................................314
Przykad 11.4. Arytmetyka uamkw dodawanie i mnoenie ...................................315
Jak to dziaa? ............................................................................................................317
wiczenia .................................................................................................................318
Podsumowanie rozdziau 11. ..........................................................................................319

Rozdzia 12. Konstruktory jeli ju budujesz .............................................. 321


Wprowadzenie do konstruktorw ..................................................................................321
Definiowanie wielu konstruktorw (przeadowanie) .....................................................323
Konstruktor domylny i zwizane z nim ostrzeenie .................................................324
Ciekawostka Czy w kwestii domylnego konstruktora jzyk C++
bawi si z Tob w kotka i myszk? ........................................................................326
Przykad 12.1. Konstruktory klasy Punkt .......................................................................327
Jak to dziaa? ............................................................................................................328
wiczenia .................................................................................................................328
Przykad 12.2. Konstruktory klasy Ulamek ...................................................................328
Jak to dziaa? ............................................................................................................330
wiczenia .................................................................................................................331
Referencje do zmiennych i argumenty przekazywane przez referencje (&) .................331
Konstruktor kopiujcy ....................................................................................................333
Ciekawostka Konstruktor kopiujcy i referencje ................................................335
Przykad 12.3. Konstruktor kopiujcy klasy Ulamek ....................................................336
Jak to dziaa? ............................................................................................................338
wiczenia .................................................................................................................338
Podsumowanie rozdziau 12. ..........................................................................................339

Rozdzia 13. Funkcje operatorowe zrb to z klas ......................................... 341


Wprowadzenie do funkcji operatorw dziaajcych na klasach ....................................341
Globalne funkcje operatorowe .......................................................................................344
Poprawienie wydajnoci dziaania kodu za pomoc referencji ......................................346
Przykad 13.1. Operatory klasy Punkt ............................................................................349
Jak to dziaa? ............................................................................................................350
wiczenia .................................................................................................................351
Przykad 13.2. Operatory klasy Ulamek ........................................................................352
Jak to dziaa? ............................................................................................................354
wiczenia .................................................................................................................355
Praca z innymi typami danych .......................................................................................355
Funkcja operatora przypisania (=) dla klasy Ulamek .....................................................356

10

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

Spis treci

11
Funkcja operatora porwnania (==) dla klasy Ulamek ..................................................358
Ciekawostka Co z tym typem boolowskim (bool)? ..............................................359
Funkcja wywietlajca dla klasy Ulamek ......................................................................359
Przykad 13.3. Kompletna klasa Ulamek .......................................................................361
Jak to dziaa? ............................................................................................................364
wiczenia .................................................................................................................366
Podsumowanie rozdziau 13. ..........................................................................................366

Rozdzia 14. Czym jest new? Klasa ParserTekstu ........................................... 369


Operator new ..................................................................................................................370
Obiekty i operator new ...................................................................................................371
Tworzenie tablic dynamicznych .....................................................................................373
Ciekawostka Radzenie sobie z problemami zwizanymi z alokacj pamici ......375
Przykad 14.1. Dynamiczne przydzielanie pamici w akcji ...........................................376
Jak to dziaa? ............................................................................................................376
wiczenie .................................................................................................................377
Projektowanie parsera (analizatora leksykalnego) .........................................................377
Przykad 14.2. Klasa ParserTekstu .................................................................................382
Jak to dziaa? ............................................................................................................384
Poprawianie kodu .....................................................................................................386
wiczenia .................................................................................................................387
Podsumowanie rozdziau 14. ..........................................................................................388

Rozdzia 15. Czym jest this? Klasa String ...................................................... 391


Wprowadzenie do klasy String ......................................................................................392
Wprowadzenie do destruktorw klasy ...........................................................................393
Przykad 15.1. Prosta klasa String ..................................................................................394
Jak to dziaa? ............................................................................................................396
wiczenia .................................................................................................................398
Gbokie kopiowanie i konstruktor kopiujcy ............................................................398
Sowo kluczowe this .......................................................................................................401
Tworzenie operatora przypisania ...................................................................................402
Tworzenie funkcji konkatenacji (czenia) ....................................................................405
Przykad 15.2. Kompletna klasa String ..........................................................................407
Jak to dziaa? ............................................................................................................409
wiczenia .................................................................................................................410
Podsumowanie rozdziau 15. ..........................................................................................411

Rozdzia 16. Dziedziczenie. C to za spadek? .................................................. 413


Dziedziczenie, czyli przyjemne z poytecznym ............................................................414
Ciekawostka Dlaczego nazwy klas bazowych
poprzedzone s sowem public? ................................................................... 417
Przykad 16.1. Klasa UlamekZmp .................................................................................418
Jak to dziaa? ............................................................................................................421
wiczenia .................................................................................................................421
Problemy zwizane z klas UlamekZmp .......................................................................422
Konstruktory domylne klas pochodnych ................................................................423
Konstruktory kopiujce dla klas pochodnych ..........................................................424
Funkcja operatora przypisania dla klas pochodnych ...............................................424
Dodawanie brakujcych konstruktorw ..................................................................424
Rozwizywanie konfliktw typw z klas bazow .................................................425
Przykad 16.2. Kompletna klasa UlamekZmp ...............................................................426
Jak to dziaa? ............................................................................................................426
wiczenia .................................................................................................................427

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

11

12

C++ bez obaw


Przykad 16.3. Klasa UlamekPrawidl ............................................................................427
Jak to dziaa? ............................................................................................................429
wiczenia .................................................................................................................431
Skadniki prywatne (private) i chronione (protected) ....................................................432
Przykad 16.4. Elementy skadowe bdce obiektami klasa UlamekJedn ................434
Jak to dziaa? ............................................................................................................436
wiczenie .................................................................................................................438
Podsumowanie rozdziau 16. ..........................................................................................438

Rozdzia 17. Polimorfizm niezaleno obiektw ........................................... 441


Inna metoda opracowania klasy UlamekZmp ................................................................442
Funkcje wirtualne id z odsiecz! ..................................................................................444
Ciekawostka Jaka jest cena za stosowanie funkcji wirtualnych? ........................445
Przykad 17.1. Zmieniona klasa UlamekZmp ................................................................447
Jak to dziaa? ............................................................................................................448
Poprawianie kodu .....................................................................................................449
wiczenie .................................................................................................................451
Czysta wirtualno i inne skomplikowane zagadnienia .............................................451
Klasy abstrakcyjne i interfejsy .......................................................................................453
Dlaczego obiekt cout nie jest prawdziwie polimorficzny? ............................................454
Przykad 17.2. Prawdziwy polimorfizm klasa Drukowalny .....................................456
Jak to dziaa? ............................................................................................................458
wiczenie .................................................................................................................459
Sowo (lub dwa sowa) na zakoczenie .........................................................................460
Sowo na zakoczenie zakoczenia ...............................................................................461
Podsumowanie rozdziau 17. ..........................................................................................463

Dodatek A Operatory oferowane przez jzyk C++ ............................................ 465


Dodatek B Wbudowane typy danych nalece do jzyka C++ .......................... 469
Dodatek C Podsumowanie skadni wyrae w jzyku C++ ............................... 471
Stae dosowne ................................................................................................................471
Podstawowa skadnia wyrae .......................................................................................472
Podstawowa skadnia polece ........................................................................................473
Struktury kontrolne ........................................................................................................473
Specjalne polecenia kontrolne ........................................................................................476
Deklaracje danych ..........................................................................................................477
Deklaracje funkcji ..........................................................................................................477
Deklaracje klas ...............................................................................................................478

Dodatek D Kody znakw ASCII ....................................................................... 481


Dodatek E

Czsto uywane funkcje biblioteczne ............................................. 483


Funkcje umoliwiajce dziaania na acuchach znakowych ........................................483
Funkcje do konwersji danych .........................................................................................485
Funkcje wykonujce operacje na pojedynczych znakach ..............................................486
Funkcje matematyczne ...................................................................................................487
Funkcje zwizane z wyznaczaniem wartoci losowych .................................................488

Dodatek F

Sownik trudnych terminw uywanych w tej ksice ..................... 489


Skorowidz ..................................................................................... 501

12

D:\Roboczy\!!!!makiety poprawki druk pdf\C++ bez obaw\!spis.doc

Rozdzia 1.

Naprawd nie ma si czego obawia w programowaniu w jzyku C++! Podobnie jak


wszystkie inne jzyki programowania stanowi on sposb na okrelenie logicznych
i precyzyjnych wskazwek dla komputera, ktre dotycz jego dziaania. Kod C++
moesz oczywicie dowolnie skomplikowa, lecz najprostsz metod nauczenia si
tego jzyka jest rozwizywanie pewnych podstawowych zada programistycznych.
Jest to te sposb, z ktrego bdziemy korzysta w tej ksice.
W kilku pierwszych podrozdziaach dokonam przegldu podstawowych koncepcji
zwizanych z programowaniem. Jeli pisae ju jakie programy, korzystajc z innych jzykw, moesz pomin t cz rozdziau lub jedynie pobienie si z ni zapozna. Jeeli jednak zechcesz si wgbi w t tre, obiecuj nie zanudzi Ci na
mier.

Myle jak programista


Programowanie moe nie przypomina czynnoci, ktre zwyke wykonywa na co
dzie. W oglnym zarysie chodzi w nim o to, e powiniene wydawa komputerowi
pewne instrukcje, robic to w bardzo logiczny i usystematyzowany sposb.

Komputery robi tylko to, co im kaesz


Komputery wykonuj tylko te czynnoci, ktrych od nich wymagasz to najwaniejsza zasada w tej ksice, ktra przyda Ci si, szczeglnie jeli nie miae dotd
adnych dowiadcze z programowaniem. Korzystajc z jzyka programowania, takiego jak C++, Visual Basic, Pascal czy FORTRAN, okrelasz list zada do wykonania i ta wanie lista stanowi program.

22

C++ bez obaw

Prowadziem kiedy praktyczne zajcia z programowania w pooonym w stanie Waszyngton miecie Tacoma, ktre znane jest chyba tylko z tego, e stanowi najbardziej
stresujce miasto Ameryki. Jednym z moich studentw by may czowieczek noszcy
somkowy kapelusz i zniszczone ubrania. Kadego dnia odwiedza mnie ze stosem
egzemplarzy codziennego zestawienia wynikw gonitw konnych i przekonywa, e
dziki wpisaniu wszystkich tych informacji do komputera i przewidywaniu za jego
pomoc numerw koni wygrywajcych wycigi moemy szybko sta si milionerami.
Niestety, sprawy nie maj si tak wietnie i adna maszyna elektroniczna nie jest
w stanie podoa tego typu zadaniu. Oczywicie, kady komputer potrzebuje informacji,
ktre nazywane s danymi dla programu. Musi jednak dodatkowo wiedzie, co pocz
z tymi informacjami. Instrukcje opisujce operacje, ktre maj by przeprowadzane
na danych (cele tych dziaa opisz w dalszej czci rozdziau), nazywane s kodem
programu.

Okrelanie, co ma robi program


Aby komputer wykona dla Ciebie jakiekolwiek zadanie, musisz dokadnie zdefiniowa,
co waciwie ma on robi.
Jak dotd miae prawdopodobnie okazj uruchamia na swoim komputerze programy napisane przez innych ludzi, takich jak Bill Gates i jego kumple. Bye wic do tej
pory tak zwanym uytkownikiem kocowym, nazywanym te w skrcie po prostu
uytkownikiem.
Piszc wasne programy, wzniesiesz si teraz na wyszy szczebel w hierarchii komputerowcw. Od teraz to Ty bdziesz decydowa, co program ma robi. To Ty bdziesz sprawia, e co si bdzie dziao.
Pamita jednak musisz, e komputer jest skoczonym, cho genialnym idiot i to w duo
wikszym stopniu ni Dustin Hoffman w filmie Rain Man. Nigdy sam nie przewidzi,
czego od niego chcesz. Nigdy te nie bdzie w stanie podejmowa samodzielnych decyzji. Jest do blu dosowny i bardzo dokadnie bdzie przeprowadza operacje, ktre
kaesz mu wykona, niezalenie od tego, jak gupie by one nie byy. Z tego te powodu
musisz by niezwykle skrupulatny w zapisywaniu instrukcji okrelajcych dziaania,
o ktre Ci chodzi.
Moe si zdarzy, e wydasz komputerowi polecenie, ktre bdzie si wydawao zupenie zrozumiae dla przecitnego czowieka, takie jak na przykad Zmie dan temperatur wyraon w stopniach Celsjusza na temperatur w skali Fahrenheita. Niestety,
nawet to jest dla maszyny zbyt ogln instrukcj. Musisz zatem okreli swe wymagania w bardziej precyzyjny sposb, podajc komputerowi kolejne kroki dziaania,
podobne do wymienionych poniej:
1. Wywietl komunikat: Wprowad temperatur w stopniach Celsjusza.
2. Pobierz liczb wprowadzon za pomoc klawiatury i zapisz j w zmiennej
o nazwie ctemp.

Rozdzia 1. Twoje pierwsze programy w C++

23

3. Skonwertuj temperatur na skal Fahrenheita, korzystajc z nastpujcego


wzoru: ftemp = (ctemp * 1.8) + 32.
4. Wywietl komunikat: Temperatura w skali Fahrenheita wynosi:.
5. Wywietl warto przechowywan w zmiennej ftemp.

Jeli to proste zadanie wymaga od Ciebie przejcia przez tak skomplikowan procedur, moesz zacz si zastanawia nad tym, po co w ogle trudzi si w ten sposb.
Odpowied jest prosta: raz napisany program mona uruchamia wielokrotnie. I chocia pisanie programu zajmuje nieraz sporo czasu, bdzie si on zwykle wykonywa
z szybkoci byskawicy.

Pisanie odpowiednich wyrae C++


Po dokadnym sprecyzowaniu zadania, ktre program ma wykonywa krok po kroku,
powiniene przystpi do zapisania odpowiednich instrukcji jzyka C++. Polecenie
jest w C++, oglnie rzecz biorc, ekwiwalentem zdania zapisanego w jzyku polskim
moe zatem okrela jedn lub wiksz ilo operacji lub tworzy jak dan, jak
przekonasz si, czytajc dalsz cz niniejszego rozdziau.
Powiedzmy, e chcesz, aby Twj program wykonywa nastpujce dziaania:
1. Wywietla komunikat: Temperatura w skali Fahrenheita wynosi:.
2. Wywietla warto zmiennej ftemp.

Kroki te moesz przeoy na nastpujce wyraenia jzyka C++:


cout << "Temperatura w skali Fahrenheita wynosi: ";
cout << ftemp;

Pamitaj, e celem programowania jest wykorzystanie komputera do przeprowadzania serii okrelonych operacji. Komputery rozumiej jednak jedynie swj wasny wewntrzny jzyk kod maszynowy ktry zapisywany jest w postaci cigw wielu
zer i jedynek. W latach 50. zeszego wieku programici zapisywali poszczeglne instrukcje za pomoc kodu maszynowego, jest to jednak niezwykle trudne i zajmuje
bardzo duo czasu.
Aby uatwi to zadanie, inynierowie rozwijajcy oprogramowanie komputerowe
opracowali jzyki programowania, takie jak FORTRAN, Basic i C, ktre umoliwiy
ludziom tworzenie programw w sposb nieco zbliony do pisania tekstw w jzyku
angielskim.
Pisanie programu moesz rozpocz od utworzenia tak zwanego pseudokodu
w ksice tej bd nieraz korzysta z tej wanie metody. Pseudokod jest bardzo podobny do jzyka naturalnego, jednak pozwala na opisanie dziaa wykonywanych przez
program w cisy sposb, odzwierciedlajcy przepyw sterowania w programie. Poniej
znajdziesz przykadowy program zapisany w postaci pseudokodu.

24

C++ bez obaw

Jeeli a jest wiksze ni b,


Wywietl a jest wiksze ni b..
W innym przypadku
Wywietl a nie jest wiksze ni b..
Po utworzeniu pseudokodu bdziesz ju bardzo blisko napisania programu w jzyku C++.
Wszystko, co bdziesz musia w tym celu zrobi, to odnale odpowiednie wyraenia
jzyka C++ odpowiadajce okrelonym dziaaniom zapisanym w pseudokodzie i zastpi ten pseudokod waciwymi poleceniami przy zachowaniu regu skadni jzyka.
if (a > b)
cout << "a jest wiksze ni b.";
else
cout << "a nie jest wiksze ni b.";

Przewag zapisu za pomoc jzyka programowania jest to, e podlega on zasadom,


ktre nie dopuszczaj adnych niejednoznacznoci. Wyraenia C++ s tak precyzyjne,
e mog by przetumaczone na cig zer i jedynek kodu maszynowego, bez koniecznoci jakiegokolwiek zgadywania intencji piszcego.
Nie powinno by dla Ciebie adnym zaskoczeniem, e jzyki programowania maj cise reguy okrelajce skadni wyrae. Reguy te s bardziej konsekwentne i zwykle
rwnie duo prostsze ni zasady rzdzce naturalnymi jzykami ludzkimi. Od czasu
do czasu bd podawa Ci te reguy. Oto na przykad skadnia wyraenia if-else:
if (warunek)
polecenie
else
polecenie

Sowa wyrnione w powyszym zapisie pogrubion czcionk to sowa kluczowe,


ktre musz si znale w programie dokadnie w takiej postaci, w jakiej zostay zapisane. Sowa zapisane zwyk czcionk, nazywane rwnie sowami zastpczymi,
reprezentuj elementy, ktre zale od Ciebie.
Aplikacja, ktra tumaczy wyraenia jzyka C++ na kod maszynowy, nazywana jest
kompilatorem. Na temat kompilatorw duo wicej informacji znajdziesz w podrozdziale Budowanie programu w C++. Najpierw jednak omwmy niektre kluczowe
definicje.

Przegld kilku specjalistycznych definicji


Chciabym za wszelk cen unikn specjalistycznego argonu, ale bdmy szczerzy
kiedy zaczynasz uczy si programowania, wchodzisz w wiat, ktry wymaga od
Ciebie uywania zupenie nowej terminologii. To troch tak jak z przysowiowym wejciem midzy wrony Poniej znajdziesz zatem szereg definicji, ktre oka si niezbdne, aby mg przetrwa w tym trudnym wiecie.

Rozdzia 1. Twoje pierwsze programy w C++

25

aplikacja
Jest dokadnie tym samym co program, ale widziany z punktu widzenia uytkownika.
Aplikacja to program, ktry jest uruchamiany przez uytkownika w celu wykonania
okrelonego zadania. Edytor tekstu jest zatem aplikacj, podobnie jak przegldarka
internetowa czy program dostpu do bazy danych. Jak przekonasz si niebawem, nawet kompilator (patrz niej) jest aplikacj, jednak jest to aplikacja bardzo szczeglnego
rodzaju, poniewa jest ona uywana przez programistw. Aby uproci spraw Twj
program bdzie aplikacj, gdy zostanie napisany, zbudowany oraz przetestowany.

dane
To informacje przechowywane przez program, ktre maj by przetwarzane lub wywietlane w czasie jego dziaania. W najprostszym ujciu dane zawieraj sowa lub
liczby, cho mog te tworzy bardziej skomplikowane i interesujce struktury danych,
zwane klasami i obiektami.

kod
To kolejny synonim sowa program, ale akcent pooony jest tu na punkt widzenia
programisty. Kod jest seri wyrae zapisanych zgodnie z zasadami skadni, uywanymi przy tworzeniu programu. Okrelenie to moe si odnosi zarwno do kodu
maszynowego, czyli cigu zer i jedynek, jak i kodu rdowego, a wic zestawu instrukcji jzyka C++. Uywanie terminu kod wie si z czasami, gdy wszyscy programici pisali swoje programy wycznie w kodzie maszynowym. Kada z instrukcji
maszynowych jest zapisywana w postaci niepowtarzalnej kombinacji zer i jedynek,
dziki czemu stanowi kod definiujcy odpowiedni akcj podejmowan przez komputer. Pomimo korzystania z jzykw wysokiego poziomu, takich jak C++, Java,
FORTRAN czy Visual Basic, programici w dalszym cigu uywali sowa kod.
Wicej informacji na ten temat znajdziesz w definicji terminu kod rdowy.
Sowo kod bywa rwnie czasami uywane do odrniania pasywnych informacji
wystpujcych w programie, czyli jego danych, od czci programu, ktra jest odpowiedzialna za przeprowadzanie dziaa, czyli wanie kodu.

kod maszynowy
To naturalny jzyk procesora (CPU). W tym jzyku kada instrukcja procesora skada
si z unikatowej kombinacji (lub kodu) zer i jedynek. W dalszym cigu moliwe jest
programowanie w kodzie maszynowym, jednak wymaga to dobrej znajomoci poszczeglnych kodw instrukcji oraz posiadania duej wiedzy na temat architektury
jednostki centralnej, czyli wszystkiego tego, co nie naley do tematyki niniejszej ksiki.
Jzyki programowania, takie jak C++, pozwalaj na pisanie programw w sposb podobny do tworzenia tekstw w jzyku angielskim, ale na tyle precyzyjnie, i mog
one by tumaczone na kod maszynowy. Jzyk C++ oferuje rwnie sporo ciekawych
moliwoci i uatwie.

26

C++ bez obaw

kod rdowy
To program napisany w jzyku wysokiego poziomu, takim jak wanie C++. Kod
rdowy skada si z szeregu wyrae jzyka C++, ktre stanowi waciwy program.
Kod taki musi zosta przetumaczony na kod maszynowy, zanim bdzie mg by
wykonany przez komputer.
Kod maszynowy, jak ju pisaem, zawiera tylko zera i jedynki, ale jest zwykle zapisywany za pomoc kodu szesnastkowego, zwanego te heksadecymalnym, ktry stanowi cig liczb o podstawie 16. Kod maszynowy wyglda zatem mniej wicej tak:
08 A7 C3 9E 58 6C 77 90

Troch trudno stwierdzi, jakie zadanie wykonuje ten kod, prawda? Dopki nie poznasz
kodw wszystkich instrukcji, program taki bdzie dla Ciebie zupenie niezrozumiay
i to wanie stanowi powd, dla ktrego bardzo niewielu ludzi uywa w obecnych czasach
kodu maszynowego do tworzenia programw. Kod rdowy, dla odmiany, przynajmniej w pewnej mierze wykazuje podobiestwo do jzyka angielskiego, a wic i do
innych jzykw naturalnych. Fragment kodu moe na przykad wyglda tak:
if(wynagrodzenie < 0)
wyswietl_komunikat_bledu();

kompilator
Jest to translator jzyka zamieniajcy wyraenia C++ (czyli kod jzyka C++) na program w postaci kodu maszynowego. Dziaanie to jest niezbdne, poniewa sam komputer, a dokadniej jego jednostka centralna (CPU ang. Central Processing Unit)
jest w stanie zrozumie jedynie kod maszynowy.

polecenie
Stanowi przewanie jedn lini programu C++. Wyraenie w C++ odpowiada z grubsza
zdaniu w jzyku naturalnym, takim jak na przykad jzyk angielski. C++ dopuszcza
stosowanie bardzo skomplikowanych struktur jzykowych skadajcych si z jednego
lub z wielu mniejszych wyrae, co rwnie przypomina zasady tworzenia zda w jzyku angielskim. Wikszo polece jzyka C++ powoduje wykonanie pojedynczego
dziaania, ale istniej rwnie takie, ktre przeprowadzaj cae serie operacji.

program
Jest seri instrukcji, ktre ma wykona komputer w stosunku do danych wejciowych.
Tak jak wspomniaem wczeniej, napisanie programu moe zaj sporo czasu, jednak
po ukoczeniu tej pracy okazuje si zwykle, e wykonuje si on niezwykle szybko
i mona go nieustannie uruchamia.

uytkownik
Osoba uruchamiajca program, czyli czowiek, ktry korzysta z komputera w celu
wykonania jakiego poytecznego zadania, takiego jak edytowanie pliku tekstowego,
przeczytanie wiadomoci e-mail, przejrzenie stron WWW czy te przelanie jakie
kwoty pienidzy z konta bankowego. Bardziej oficjalna nazwa uytkownika to uytkownik kocowy.

Rozdzia 1. Twoje pierwsze programy w C++

27

W czasie, gdy pracowaem w firmie Microsoft, uytkownik by osob powodujc


wikszo istniejcych na wiecie problemw, by jednak rwnie czowiekiem, ktry
paci wszystkie rachunki i generowa wszystkie zyski przedsibiorstwa. Rozpoczynajc projektowanie powanych programw, musisz bardzo uwanie przyjrze si potrzebom uytkownika i sprbowa przewidzie wszystkie potencjalne kopoty, ktre
mog mu si przytrafi w zwizku z korzystaniem z Twojej aplikacji.
Mimo e jako programicie bdzie Ci si zdarza patrze z gry na uytkownikw,
musisz mie wiadomo, e pierwszym uytkownikiem aplikacji jest zawsze sam
programista! Po napisaniu programu bdziesz bowiem prawdopodobnie pierwsz osob,
a nieraz i jedyn osob, ktra uruchomi program i sprawdzi jego dziaanie. Pamitaj
wic, e bdc programist, jeste te jednoczenie normalnym uytkownikiem.

Co wyrnia jzyk C++?


Wikszo rzeczy, ktre wanie napisaem o C++, odnosi si rwnie dobrze do innych
jzykw programowania, takich jak Pascal, Java, FORTRAN czy Basic. Wszystkie
one s jzykami wysokiego poziomu, co oznacza, e nie maj bardzo bliskiego zwizku
z kodem maszynowym, lecz uywaj sw kluczowych, takich jak if i while, przynajmniej oglnie przypominajcych sowa nalece do jzyka angielskiego.
Jeli jednak wszystkie te jzyki umoliwiaj wykonanie dokadnie tego samego zadania, polegajcego na pisaniu programw w prostszy sposb ni przy wykorzystaniu
kodu maszynowego, dlaczego jest ich a tak wiele?
Kady z wymienionych tu jzykw zosta opracowany w nieco innym celu. Basic, na
przykad, zaprojektowano w taki sposb, aby by atwy w nauce i uywaniu. Dziki
temu moliwe jest bardzo swobodne traktowanie skadni tego jzyka, co z kolei prowadzi nieraz do do niezrozumiaych i bdnych zachowa programw napisanych
za jego pomoc. Mimo to firma Microsoft opracowaa rodowisko Visual Basic, ktre
jest bardzo potnym i wygodnym narzdziem pozwalajcym na szybkie tworzenie
aplikacji przeznaczonych dla systemu Windows.
Pascal zosta zaprojektowany z myl o rodowiskach akademickich, w ktrych wykorzystywany jest w celu nauczania sposobw rozwizywania zoonych problemw
programistycznych. O ile Basic jest jzykiem szybkim i z bardzo swobodnymi reguami skadni, tak jzyk Pascal cechuj niezwyka szczegowo i masa wyrae o bardzo skomplikowanej skadni. Pascal jest bardzo dobrym jzykiem, jednak wikszo
programistw woli korzysta z narzdzi, ktre pozwalaj na wiksz swobod i nie
posiadaj tak wielu ogranicze.
C zostao pocztkowo opracowane w celu tworzenia systemw operacyjnych. Podczas gdy jego skadnia narzuca konieczno stosowania znacznie bardziej sztywnych
struktur jzykowych (dziki czemu zapobiega te powstawaniu nieprzewidzianych
bdw) ni Basic, jest to rwnoczenie niezwykle jasny jzyk, ktry umoliwia uywanie
skrtw i pozwala na tworzenie bardziej zwizych programw. Prosta i jednoczenie

28

C++ bez obaw

zrozumiaa skadnia C przez lata zdobya niezwyk popularno wrd programistw. Inn zalet C jest fakt, e jzyk ten nakada bardzo niewiele ogranicze, dziki
czemu prawie wszystko, co da si zrobi za pomoc kodu maszynowego, mona te
osign przy wykorzystaniu instrukcji jzyka C.
Dobrze, ale co to ma wsplnego z C++?
Podstawowa rnica midzy C a C++ polega na tym, e drugi z nich jest dodatkowo
wyposaony w moliwoci programowania zorientowanego obiektowo. Ta metoda
programowania zostaa opracowana specjalnie dla potrzeb tworzenia zoonych systemw, takich jak graficzne interfejsy uytkownika oraz rodowiska sieciowe. Jako
programista korzystajcy z jzyka zorientowanego obiektowo bdziesz pyta przede
wszystkim o nastpujce kwestie:
1. Jakie s podstawowe rodzaje danych (czyli informacji) wystpujcych

w problemie, ktry ma zosta rozwizany?


2. Jakie operacje maj by zdefiniowane dla kadego rodzaju danych?
3. W jaki sposb poszczeglne obiekty danych oddziauj na siebie nawzajem?

Co z Jav i C#?
Gdy pod koniec lat 80. ubiegego wieku zaczynao si intensywnie rozwija
programowanie zorientowane obiektowo, podjto kilka niezalenych prb opracowania zorientowanej obiektowo wersji jzyka C. Bjarne Stroustrup powoa
do ycia pierwszy jzyk tego typu, ktry zyska szerok akceptacj w rodowisku programistycznym. Jzyk ten, czyli wanie C++, jest nadal bardzo powszechnie stosowany, czego dowodem jest chociaby istnienie tej ksiki.
C++ nie jest jednak ostatnim sowem, jakie zostao powiedziane w kwestii
projektowania zorientowanej obiektowo wersji jzyka C. Dwa nowe jzyki
Java i C# s tak bardzo zblione do C i C++, e nosz miano opartych
na C, ale kady z nich jest nieco inny.
Istnieje szereg rnic pomidzy tymi trzema jzykami. C++ zosta opracowany w taki sposb, aby w duej mierze zapewni wsteczn zgodno z C,
a wikszo programistycznych trikw moliwych w C (a wrd nich i takie,
ktrych stosowanie jest zdecydowanie odradzane przez dzisiejszych guru
informatyki) nadal dziaa w jzyku C++, jednak s zupenie nie do pomylenia
w Javie czy C#.
Java i C# to doskonae narzdzia przeznaczone do tworzenia aplikacji, jednak w adnym przypadku nie nadajce si do pisania systemw operacyjnych. Mimo e przejy one znaczn cz skadni jzykw C i C++, nie pozwalaj na przykad na uzyskanie dostpu do dowolnych adresw pamici
operacyjnej. Niektrzy ludzie uwaaj rwnie, e stanowi one czystsze
implementacje idei programowania obiektowego ni C++.
Wbrew tym opiniom rnice pomidzy skadni Javy i C# nie s zbyt wielkie.
Powoana do ycia przez firm Sun Microsystems Java jest jzykiem niezalenym od platformy, za C# zosta opracowany przez Microsoft dla potrzeb
zaprojektowanej przez t firm platformy .NET. Gwna rnica wie si
wic tak naprawd ze stosowan platform i uywanymi dodatkowymi bibliotekami funkcji.

Rozdzia 1. Twoje pierwsze programy w C++

29

Mimo e kilka razy wspomniaem tu o C++ jako o jzyku uywanym do pisania systemw operacyjnych, moesz, oczywicie, bez przeszkd stosowa go
do tworzenia dowolnych aplikacji biznesowych, gier komputerowych i programw do prywatnego uytku. Jzyk ten oferuje wiksz swobod ni spora
cz pozostaych jzykw programowania, w tym rwnie swobod w generowaniu bdw niskiego poziomu. To wanie dlatego prbuj pokierowa
Ci tak, aby omin te wszystkie ewentualne puapki.
Dobr informacj bdzie dla Ciebie z pewnoci rwnie to, e gdy nauczysz
si ju C++, przejcie do programowania w Javie czy C# powinno okaza si
bardzo atw spraw. C++ jest take atwiejszym do opanowania jzykiem
dla osb, ktre maj ju jakie dowiadczenie w programowaniu w C.

Zauwayem, e w procesie uczenia si programowania zorientowanego obiektowo


bardzo pomaga wczeniejsze solidne opanowanie skadni podstawowych wyrae.
Z tego te powodu nie koncentruj si na orientacji obiektowej a do rozdziau 10.
Wprowadzam jednak pewne obiekty czyli fragmenty danych, z ktrymi cz si
okrelone operacje ju na pocztku tej ksiki. W tym rozdziale uywam na przykad obiektu danych cout, ktry nie stanowi elementu jzyka C. W klasycznym C
w celu wywietlenia informacji na ekranie musiaby wywoywa specjaln funkcj
skadajc si ze zdefiniowanej wczeniej serii wyrae. Korzystajc z obiektu cout,
wysyasz po prostu dane do obiektu, ktry w dosownym znaczeniu wie, w jaki
sposb wywietli te informacje.
Zamiast wic zastanawia si: Wywoam funkcj, ktra wywietli ten tekst na ekranie,
powiniene raczej pomyle: Przel ten tekst do obiektu cout, ktry reprezentuje
wyjcie konsoli, i niech ju on martwi si o to, jak wywietli moje dane.
Taki sposb dziaania pozwala na o wiele sprawniejsze przeprowadzanie wszelkiego
typu operacji z kilku powodw, z ktrych niektre s bardziej, a inne mniej oczywiste.
W szczeglnym przypadku korzystania z obiektu cout (czyli obiektu wyjcia konsoli) objawia si to tym, e obiekt ten wie, jak poradzi sobie z wywietlaniem rnych rodzajw danych i co jeszcze istotniejsze wiedza ta moe by poszerzona o dowolne nowe typy danych, jakie tylko zechcesz utworzy. Programowanie
zorientowane obiektowo nie narzuca na Ciebie zatem ogranicze zwizanych z okrelonym zestawem typw i formatw danych, jak miao to miejsce w przypadku starego podejcia stosowanego w jzyku C.
Odpowied na pytanie, co tak naprawd oznacza przesyanie polece do obiektu i czym rni si ono od stylu uywanego w klasycznym programowaniu strukturalnym, jest jednym
z gwnych tematw tej ksiki i osi, wok ktrej kry tre jej caej drugiej poowy.

Tworzenie programu w jzyku C++


Pisanie programu jest w rzeczywistoci tylko pierwszym krokiem w procesie tworzenia
aplikacji. W kolejnych punktach opisz pokrtce wszystkie etapy, przez ktre musisz
przej, aby opracowa prawdziwy program.

30

C++ bez obaw

Wprowadzanie wyrae tworzcych program


Aby napisa program w jzyku C++, a waciwie rwnie w kadym innym jzyku
programowania, musisz dysponowa jak metod wprowadzania wyrae skadajcych
si na aplikacj. Istnieje co najmniej kilka sposobw wykonania tego zadania, a zaliczy
mona do nich na przykad takie:
t Moesz skorzysta z edytora tekstowego, takiego jak Microsoft Word lub

Notatnik, ktry jest aplikacj rozprowadzan wraz z systemem operacyjnym.


W istocie dosownie kady edytor okae si wystarczajcy. Korzystajc z tego
sposobu, musisz pamita o koniecznoci zapisywania dokumentw
czy raczej plikw rdowych w czystym formacie tekstowym.
t Moesz wprowadzi tekst, uywajc zintegrowanego rodowiska programisty

(IDE ang. Integrated Development Environment). rodowisko takie skada


si z edytora tekstowego poczonego z innymi przydatnymi narzdziami
programistycznymi. Przykadem zintegrowanego rodowiska programisty
jest Microsoft Visual Studio.
Po wprowadzeniu wyrae tworzcych program i sprawdzeniu, czy nie wystpuj w nim
jakie bdy, moesz przystpi do zbudowania programu.

Budowanie programu (kompilowanie i czenie)


Budowanie programu jest procesem polegajcym na skonwertowaniu Twojego kodu
rdowego, czyli wyrae jzyka C++, na aplikacj, ktra moe zosta uruchomiona.
Jeli program jest poprawnie napisany, czynno ta jest rwnie prosta jak nacinicie
jednego klawisza funkcyjnego. Proces ten w rzeczywistoci skada si z dwch oddzielnych krokw.
Pierwszym z nich jest kompilacja programu, ktra polega na przetumaczeniu wyrae
C++ na kod maszynowy, zwany te kodem obiektowym. Jeli krok ten zostanie pomylnie przeprowadzony, w kolejnym etapie uruchamiany jest linker, czyli program
czcy lub jeszcze inaczej konsolidujcy, ktrego zadaniem jest poczenie
otrzymanego kodu maszynowego z kodem pochodzcym z biblioteki funkcji C++.
Biblioteka C++, nazywana rwnie w technicznych krgach bibliotek czasu wykonania, zawiera funkcje, ktre wywoujesz w celu wykonania typowych czynnoci.
W jzyku C termin funkcja stanowi waciwie synonim sowa procedura. W bibliotece
znajduje si na przykad standardowa funkcja sqrt (co stanowi skrt od sw pierwiastek
kwadratowy ang. square root), ktra zostaa opracowana po to, aby nie musia
za kadym razem samodzielnie oblicza pierwiastka kwadratowego liczby. Zawiera
ona rwnie procedury, ktrych zadaniem jest przesyanie danych do monitora i ktre
umoliwiaj odczytywanie i zapisywanie plikw danych na dysku Twojego komputera.
Umieszczony na ssiedniej stronie rysunek przedstawia sposb dziaania procesu budowania aplikacji. Pamitaj, e gdy korzystasz ze zintegrowanego rodowiska programisty, czynnoci te s przez nie wykonywane automatycznie; Twoim zadaniem
jest jedynie nacinicie odpowiedniego klawisza funkcyjnego.

Rozdzia 1. Twoje pierwsze programy w C++

31

Jeeli operacja budowania zostanie zakoczona sukcesem, moesz sobie pogratulowa.


Oznacza to bowiem bdzie, e ani kompilator, ani program czcy nie znalazy adnych bdw. Ale czy bdzie to jednoczenie oznacza koniec Twojej pracy? Niezupenie. Kompilator wyapuje bdy gramatyczne, a wic bdy skadni, istnieje jednak
bardzo wiele bdw, ktrych nie jest w stanie znale.
Rozwa nastpujc analogi. Zamy, e dane jest ponisze zdanie:
Ksiyc jest zrobiony zielonego sera.
Zdanie to nie jest poprawn wypowiedzi w jzyku polskim. Aby je poprawi, powiniene doda w odpowiednim miejscu liter z. Zdanie przyjmie wtedy posta:
Ksiyc jest zrobiony z zielonego sera.
W zdaniu tym nie wystpuj ju adne bdy skadniowe. Poprawno gramatyczna
nie oznacza jednak jeszcze, e zdanie jest poprawne w szerszym kontekcie, bo czy jest
ono prawdziwe w sensie logicznym? Oczywicie, nie jest. Aby uczyni podane powyej
zdanie prawdziwym, bdziesz musia w odpowiednim jego miejscu doda sowo nie.
Ksiyc nie jest zrobiony z zielonego sera.
Z jzykami programowania jest podobnie. Kompilator C++ sprawdza, czy Twj program jest poprawny skadniowo, i jeli tak nie jest, zwraca informacj na temat wiersza,
w ktrym pojawi si bd. Waniejszym pytaniem jest jednak to, czy program bdzie
si zachowywa waciwie we wszystkich przypadkach, gdy zostanie uruchomiony,
a odpowied na to pytanie nie jest ju taka oczywista. I ta wanie kwestia prowadzi
nas do nastpnego kroku tworzenia aplikacji.

Testowanie programu
Po zakoczonym sukcesem zbudowaniu programu powiniene uruchomi go kilkukrotnie w celu sprawdzenia, czy wykonuje on dokadnie te operacje, do ktrych zosta
powoany. W przypadku powanej aplikacji, a wic programu, ktry bdzie udostpniany lub sprzedawany innym uytkownikom, bdziesz musia przetestowa to wielokrotnie. Moesz sobie nie zdawa z tego sprawy, ale due firmy informatyczne
maj w rzeczywistoci cae oddziay, ktrych jedynym zadaniem jest wanie testowanie oprogramowania utworzonego przez przedsibiorstwo.

32

C++ bez obaw

Bdy, ktrych bdziesz szuka na tym etapie, nazywane s bdami logiki programu.
Bdy te bd wystpoway, gdy napiszesz poprawny skadniowo program (co oznacza, e nie bdzie na przykad w nim brakowao adnych przecinkw), ale z pewnych
wzgldw program ten nie bdzie dziaa tak, jakby sobie tego yczy.
Logiczne bdy programu mog by duo bardziej nieuchwytne ni bdy skadni.
Wyobra sobie, e program wywietla niewaciwy wynik lub nagle zatrzymuje swoje
dziaanie bez adnego wyranego powodu. Ktre wyraenie spowodowao problem?
Odpowied nie zawsze jest oczywista. Powodw moe by mnstwo. Jednym z nich
moe by to, e przyje pewne zaoenie, ktre jest prawdziwe w niektrych przypadkach, lecz w innych nie. Proces testowania programu i znajdowania rda problemw nazywany jest debugowaniem lub nieco mniej cile uruchamianiem
programu.

Poprawianie w miar potrzeby


Jeeli program dziaa jak naley, masz wolne. Jeli jednak w programie wystpuj
opisane wyej bdy logiczne, musisz okreli rdo problemu, wrci do etapu pisania i dokona odpowiednich zmian w kodzie rdowym C++, a nastpnie ponownie przebudowa program.
W przypadku bardziej skomplikowanych programw konieczne moe si okaza
wielokrotne przejcie przez ten cykl. Program taki moe wymaga bardzo wielu testw w celu sprawdzenia, czy dziaa zgodnie z zaoeniami we wszystkich moliwych
przypadkach. Dopki nie przeprowadzisz wszystkich niezbdnych testw i poprawek,
aplikacja nie moe by naprawd uwaana za ukoczon. Jednak w przypadku prostszych programw bdziesz zwykle mg ograniczy si do niewielkiej liczby testw.

Rozdzia 1. Twoje pierwsze programy w C++

33

Instalowanie
Twojego wasnego kompilatora
Jeli masz swj wasny kompilator jzyka C++, moesz go wykorzysta w celu kompilowania i uruchamiania przykadw, ktre znajduj si w tej ksice. Najlepsze wyniki otrzymasz, uywajc moliwie najnowszej wersji C++, ale przykady napisane s
w taki sposb, aby dziaay pod rnymi kompilatorami tego jzyka.
Moesz rwnie zainstalowa kompilator C++ GNU, ktry znajduje si na pycie
CD-ROM doczonej do niniejszej ksiki. Jest on darmowym programem typu shareware przeznaczonym do dziaania w rodowiskach MS-DOS. W systemie Windows
moesz uruchomi ten kompilator, otwierajc najpierw okno polece MS-DOS. Masz
prawo do swobodnego udostpniania kadego programu opracowanego przy uyciu
kompilatora GNU. Na pycie CD-ROM znajduje si rwnie rodowisko programisty
RHIDE, z ktrego moesz korzysta do pisania i testowania programw.
Aby zainstalowa kompilator, powiniene odnale plik PRZECZYTAJ.TXT znajdujcy
si w gwnym katalogu pyty. CD-ROM zawiera rwnie katalog Przykadowe kody
i odpowiedzi. W jego podkatalogach umieszczono odpowiedzi do wszystkich wicze
znajdujcych si w tej ksice.
Pyta CD zawiera take rdowe pliki kompilatora. Nie musisz ich jednak instalowa,
przynajmniej dopki nie stwierdzisz, e jest Ci to do czego potrzebne.

Przykad 1.1. Wywietlanie komunikatu


Aby zacz programowa, otwrz nowy plik rdowy i wprowad kod zamieszczony
poniej. Jeeli uywasz rodowiska programisty RHIDE, wybierz w tym celu polecenie
New z menu File. Nastpnie wpisz kod rdowy dokadnie tak, jak zostao to przedstawione w poniszym przykadzie. Jeli korzystasz ze rodowiska Microsoft Visual
Studio, postpuj wedug wskazwek, ktre zamieciem w punkcie Jeli uywasz
Microsoft Visual Studio znajdujcym si na nastpnej stronie.
Niektre czynnoci w Visual Studio bdziesz musia przeprowadzi w nieco inny
sposb w RHIDE. Nie powiniene si wic spodziewa, e kod od razu skompiluje
si poprawnie w rodowisku VS, dopki nie zapoznasz si z uwagami zamieszczonymi we wspomnianym wyej punkcie.

wyswietlanie1.cpp
#include <iostream>
using namespace std;
int main(){
cout << "Nie bj si, C++ jest tutaj!";
return 0;
}

34

C++ bez obaw

Pita linia kodu, rozpoczynajca si od nazwy obiektu cout, nie musi zawiera dokadnie
takiej liczby spacji jak w przedstawionym przykadzie. Rwnie przestrzenie oddzielajce
poszczeglne sowa i znaki, takie jak <<, mog skada si z dowolnej iloci znakw spacji.
Musisz jednak zwrci uwag na kilka szczegw, z ktrych pierwszym jest sprawa
uywania wielkich i maych liter. C++ wymaga cisej konsekwencji w stosowaniu
znakw, dlatego nie powiniene pisa wielk liter niczego poza tekstami ujtymi
w znaki cudzysowu. Pamitaj take o umieszczeniu znaku rednika (;) na kocu
drugiej, pitej i szstej linii kodu.
Po wprowadzeniu programu zapisz plik pod nazw wyswietlanie1.cpp, skompiluj go
i uruchom. W efekcie tych dziaa powiniene zobaczy na ekranie nastpujcy tekst,
jeli oczywicie nie popenie nigdzie bdu:
Nie bj si, C++ jest tutaj!

Jeli uywasz rodowiska RHIDE


Jeeli zainstalowae bezpatne rodowisko typu shareware, ktre opisane zostao w poprzednim podrozdziale, i chcesz za jego pomoc skompilowa i uruchomi program,
oto sposb, z ktrego powiniene skorzysta:
1. Zapisz program pod nazw wyswietlanie1.cpp, jeli dotd tego nie zrobie.

Tak naprawd moesz wybra dowoln nazw pliku, wane jest, aby nada
mu rozszerzenie cpp. W tym celu w rodowisku RHIDE wybierz polecenie
Save z menu File.
2. Nacinij klawisz F9, aby zbudowa program.
3. Brak jakiegokolwiek komunikatu o bdzie oznacza bdzie, e program

zosta poprawnie skompilowany i zlinkowany. Gratulacje! Jeli jednak


pojawiy si jakie komunikaty o bdach, to albo niewaciwie zainstalowae
kompilator, albo le wpisae jak cz kodu przykadu. Wr do niego
i sprawd, czy poprawnie wprowadzie kady znak, w tym rwnie znaki
przestankowe, dokadnie tak, jak zostao to pokazane w przykadzie.
4. Po udanym skompilowaniu przykadu przetestuj go, opuszczajc najpierw

rodowisko RHIDE. W tym celu z menu File wybierz polecenie DOS Shell.
5. Po przejciu do linii polece systemu DOS napisz nazw programu i nacinij

klawisz Enter:
wyswietlanie1

6. Po zakoczeniu testowania programu wprowad ponisze polecenie i nacinij

klawisz Enter:
exit

Masz rwnie moliwo uruchamiania programw bezporednio w rodowisku RHIDE,


ale po zakoczeniu ich wykonywania sterowanie zostanie natychmiast przekazane
z powrotem do RHIDE, z czego wynika, e dopki Twj program sam nie bdzie
wstrzymywa swego dziaania, nie bdziesz mg przekona si, co pojawia si na
wyjciu konsoli. Wanie dlatego zalecam Ci korzystanie z polecenia DOS Shell.

Rozdzia 1. Twoje pierwsze programy w C++

35

Jeli uywasz Microsoft Visual Studio


Jeeli do pisania swoich programw uywasz rodowiska Microsoft Visual Studio,
bdziesz jeszcze musia wykona kilka dodatkowych czynnoci. Visual Studio stanowi
doskonae narzdzie do pisania programw, ale opracowane zostao gwnie z myl
o tworzeniu powanych aplikacji dla systemu Windows, nie za prostych programw.
Jednak pisaniem wanie tych ostatnich musisz si zaj, jeli C++ jest dla Ciebie
czym zupenie nowym.
Aby utworzy program w Visual Studio, bdziesz najpierw musia wybra odpowiedni typ projektu. Projekt w Visual Studio oznacza zbir plikw, ktre razem tworz
program.
1. Korzystajc z menu File, wybierz polecenie New. Moesz te klikn przycisk

New Project, ktry powinien by widoczny na pasku narzdzi mniej wicej


w poowie szerokoci ekranu.
2. W oknie dialogowym pojawiajcym si na ekranie wybierz pozycj Console

Application jako typ projektu i wprowad nazw programu, ktr w naszym


przypadku bdzie wyswietlanie1, a nastpnie kliknij przycisk OK.
3. Jeli plik wyswietlanie1.cpp nie zostanie otwarty w oknie programu, odszukaj

go wrd nazw plikw widocznych w lewej czci okna i dwukrotnie kliknij


jego nazw.
Przed wprowadzeniem jakiegokolwiek kodu C++ usu ca zawarto pliku wyswietlanie1.cpp z wyjtkiem nastpujcej linii:
#include "stdafx.h"

Wyraenie to musi znajdowa si w kadej aplikacji uruchamianej w konsoli, czyli


w kadym programie nieokienkowym opracowanym za pomoc Visual Studio. Jeeli
czytajc t ksik i korzystajc z zawartych w niej przykadw, masz zamiar korzysta ze rodowiska Visual Studio, pamitaj, aby zawsze wstawia t lini na pocztku
kadego programu.
Kod pliku wyswietlanie1.cpp powinien zatem wyglda jak poniej (wraz z dodan na
pocztku lini, ktra wyrniona tu zostaa pogrubion czcionk):
#include "stdafx.h"
#include <iostream>
using namespace std;
int main() {
cout << "Nie bj si, C++ jest tutaj!";
return 0;
}

Aby zbudowa program, powiniene jedynie nacisn klawisz F7. Spowoduje to uruchomienie zarwno kompilatora, jak i programu czcego.

36

C++ bez obaw

Jeli kod zosta poprawnie skompilowany i poczony gratuluj! Oznacza to, e


znajdujesz si na dobrej drodze. Jeli podczas budowania pojawiy si jakie bdy,
powiniene powrci do edycji pliku rdowego i upewni si, e dokadnie i bezbdnie wprowadzie kad lini kodu.
Aby uruchomi program, nacinij kombinacj klawiszy Ctrl+F5. Istniej co prawda
inne metody uruchamiania programu w rodowisku Visual Studio, jednak wymieniony
tu sposb stanowi jedyny, ktry pozwala unikn problemu polegajcego na tym, e
okno MS-DOS pojawia si na ekranie na krtk chwil i natychmiast znika. Wybranie
skrtu Ctrl+F5 (uruchomienie programu bez debugowania) powoduje wykonanie programu i wywietlenie na ekranie tekstu Press any key to continue (nacinij dowolny
klawisz, aby kontynuowa), dziki czemu masz szans, aby przyjrze si danym, ktre
pojawiy si na wyjciu konsoli.

Jak to dziaa?
Uwierz w to albo nie, ale ten prosty program zawiera tak naprawd tylko jedn instrukcj. O pozostaych zawartych w nim wyraeniach moesz od teraz myle jak
o skadnikach pewnego szablonu, czyli o elementach, ktre musisz umieci w kadym
programie, ale ktre moesz spokojnie zignorowa przy analizie jego kodu. Jeli jednak
interesuj Ci szczegy, w kolejnej ramce Na marginesie znajdziesz dokadniejsze
omwienie znaczenia dyrektywy #include.
W kodzie znajdujcym si poniej za pomoc pogrubionej czcionki wyrniono standardowe, niezbdne do dziaania programu elementy. Na razie nie musisz si martwi
tym, dlaczego s one konieczne, po prostu uywaj ich. Pomidzy nawiasami klamrowymi ({}) powiniene umieci waciwe linie programu, ktry w naszym przypadku
zawiera tak naprawd tylko jedn instrukcj.
#include <iostream>
using namespace std;
int main() {
Tutaj_wprowad_swoje_wyraenia!
return 0;
}

Jak ju wspomniaem, nasz program zawiera tylko jedn prawdziw instrukcj, ktr
wprowadzie w miejsce pitej linii w znajdujcym si powyej kodzie.
cout << "Nie bj si, C++ jest tutaj!";

Ale co to jest cout? To obiekt, pojcie, ktre szerzej bd omawia w drugiej poowie
tej ksiki. Na razie jednak wszystkim, co trzeba Ci na ten temat wiedzie, jest to, e
cout oznacza po prostu wyjcie konsoli. Innymi sowy, obiekt ten reprezentuje
ekran Twojego komputera. Gdy wylesz co na ekran, zostanie to na nim wywietlone,
dokadnie tak, jak mona si tego spodziewa.

Rozdzia 1. Twoje pierwsze programy w C++

37

W jzyku C++ wywietlasz dane, korzystajc z obiektu cout oraz lewostronnego operatora strumienia (<<) pokazujcego przepyw danych z wartoci, ktr w naszym
przypadku jest acuch tekstowy "Nie bj si, C++ jest tutaj"", do konsoli. Uywajc obiektu cout, nigdy nie popenisz bdu, jeli tylko naleycie zapamitasz metod
jego dziaania, korzystajc z takiego wanie sposobu.

Nie zapomnij o redniku (;). Kade polecenie w jzyku C++ musi by zakoczone
znakiem rednika, a od reguy tej istnieje tylko kilka wyjtkw.
Ze wzgldw technicznych obiekt cout musi si zawsze znajdowa po lewej stronie,
niezalenie od miejsca, w ktrym bdziesz go uywa. Dane przepywaj w takim
przypadku w lew stron i powiniene korzysta ze strzaek tworzonych z dwch
poczonych znakw mniejszoci wskazujcych w tym kierunku.
W zamieszczonej poniej tabeli zebrano inne proste przykady wykorzystania obiektu
cout.
Polecenie

Dziaanie

cout << "Czy jeste fanem C++?"

Wywietla tekst Czy jeste fanem C++?

cout << "Halo!"

Wywietla tekst Halo!

cout << "Hej tam, na pokadzie!"

Wywietla tekst Hej tam, na pokadzie!

WICZENIA
wiczenie 1.1.1. Napisz program, ktry bdzie wywietla komunikat: Zabierz si
za programowanie!. Jeli chcesz, moesz pracowa na bazie tego samego pliku rdowego, ktry uywany by w omawianym wczeniej przykadzie, i zmieni go w celu
wykonania zadania. (Wskazwka: zmodyfikuj tylko tekst znajdujcy si w cudzysowie,
poza tym wykorzystaj dokadnie ten sam kod programu).
wiczenie 1.1.2. Napisz program, ktry bdzie wywietla Twoje imi i nazwisko.

38

C++ bez obaw

Co z wyraeniami #include i using?


Napisaem, e pierwsz prawdziw lini programu jest tak naprawd pita
linia kodu. Co wic oznacza pierwsza linia kodu?
#include <iostream>

Jest to przykad dyrektywy preprocesora C++, czyli oglnej instrukcji przeznaczonej dla kompilatora jzyka. Dyrektywa w postaci:
#include <nazwa_pliku>

powoduje zaadowanie deklaracji i definicji stanowicych fragment standardowej biblioteki funkcji jzyka C++. Bez tego wyraenia nie mgby uywa
obiektu cout.
Jeli zdarzyo Ci si korzysta ze starszych wersji C++ i C, moesz si zastanawia, dlaczego wraz z nazw pliku nie jest podane jego rozszerzenie,
takie jak h. Nazwa pliku iostream okrela wirtualny plik nagwkowy, ktry
zawiera informacje w formie prekompilowanej.
Jeeli dopiero zaczynasz swoj przygod z C++, zapamitaj tylko, e musisz
umieszcza dyrektyw #include, aby umoliwi sobie korzystanie z okrelonych fragmentw biblioteki standardowej. W dalszej czci, gdy zaczniemy
uywa funkcji matematycznych, takich jak sqrt (pierwiastek kwadratowy),
bdziesz musia wprowadzi do pliku dyrektyw wczajc plik nagwkowy
biblioteki funkcji matematycznych:
#include <math.h>

Czy jest to dodatkowa praca? Tak. Czy C++ mgby zosta opracowany
w taki sposb, aby unikn tej koniecznoci? Moe. Istnienie plikw nagwkowych spowodowane jest rozgraniczeniem midzy samym jzykiem C
a standardow bibliotek czasu wykonania. Dowiadczeni programici C i C++
czasami unikaj uywania bibliotek lub modyfikuj je w celu dostosowania
funkcji do swoich potrzeb. Funkcje i obiekty biblioteczne chocia konieczne dla pocztkujcych traktowane s dokadnie w taki sam sposb
jak funkcje definiowane przez uytkownika, co oznacza, e musz by deklarowane, o czym wicej dowiesz si z lektury rozdziau 4. I to wanie jest
gwnym zadaniem plikw nagwkowych uwolnienie Ci od koniecznoci
samodzielnego deklarowania czegokolwiek.
Powiniene rwnie korzysta z wyraenia using. Pozwala Ci to na bezporednie korzystanie z obiektw, takich jak std::cout. Bez tego wyraenia
odwoania do obiektw musiayby mie nastpujc form:
std::cout << "Nie bj si, C++ jest tutaj!";

Z obiektu cout i jego kuzyna, cin, bdziemy korzysta w tej ksice bardzo
czsto, po dobnie jak z innego symbolu nalecego do przestrzeni nazw std,
ktrym jest endl. Zdecydowanie prociej bdzie wic nam umieci wyraenie using na pocztku kadego programu ni za kadym razem uywa
penych nazw obiektw.

Rozdzia 1. Twoje pierwsze programy w C++

39

Przechodzenie
do kolejnej linii wywietlania
Zauwaye pewnie, e nasz napisany w C++ program nie spowodowa automatycznego przejcia do nastpnej linii tekstu na ekranie. Aby to zrobi, musisz sam wywietli odpowiedni znak nowej linii, a jeeli sobie to odpucisz, cay tekst pojawi si
w tym samym wierszu. Wyjtkiem bdzie tu sytuacja, gdy mimo braku jakiegokolwiek znaku rozpoczcia nowej linii, tekst bdzie automatycznie zawijany po wypenieniu biecej linii; aosny wynik tego dziaania rzadko jednak bdzie spenia Twoje
oczekiwania.
Jedn z metod wywietlenia nowej linii jest skorzystanie z predefiniowanej staej endl.
Podobnie jak obiekt cout, staa endl take naley do przestrzeni nazw std:
std::cout << "Nie bj si, C++ jest tutaj!" << std::endl;

Umieszczenie tego wyraenia na pocztku programu:


using namespace std;

uwolni Ci od koniecznoci mudnego podawania przestrzeni nazw, do ktrej nale


cout i endl. Bdziesz zatem mg wprowadzi wywietlajce tekst na ekranie wyraenie w prostszej postaci:
cout << "Nie bj si, C++ jest tutaj!" << endl;

Nazwa endl jest skrtem od angielskich sw end line oznaczajcych koniec linii,
powinna by zatem czytana jako end ELL, nie za end jeden, jak mogoby Ci
si wydawa.

Innym sposobem przejcia do nowej linii jest wstawienie w odpowiednim miejscu


znakw \n. Znaki te stanowi sekwencj, ktra w C++ jest interpretowana w szczeglny, niedosowny sposb. Dziki temu wprowadzenie poniszego wyraenia odniesie
taki sam skutek jak poprzednio:
cout << "Nie bj si, C++ jest tutaj!\n";

Przykad 1.2. Wywietlanie wielu linii


Program opisany w tym podrozdziale wywietla komunikat w kilku kolejnych wierszach. Pamitaj, aby w czasie wpisywania kodw programw zwraca baczn uwag
na wielko uywanych liter. Tylko zmiana wielkoci liter w tekstach ujtych w cudzysw nie bdzie miaa znaczenia dla poprawnoci kompilacji i program w dalszym
cigu bdzie dziaa waciwie.

40

C++ bez obaw

wyswietlanie2.cpp
#include <iostream>
using namespace std;
int main()
cout <<
cout <<
cout <<
}

{
"Jestem Blaxxon," << endl;
"komputer o boskiej mocy." << endl;
"Bj si mnie!" << endl;

return 0;

Zapisz program w pliku wyswietlanie2.cpp, a nastpnie skompiluj go i uruchom w taki


sam sposb, jak robie to w przypadku programu z przykadu 1.1.

Jak to dziaa?
Ten przykad jest bardzo podobny do pierwszego przedstawionego przeze mnie kodu.
Rnica polega na tym, e wykorzystuje on znaki nowej linii. Bez nich program wywietlaby nastpujcy tekst:
Jestem Blaxxon,komputer o boskiej mocy.Bj si mnie!

co z pewnoci nie jest efektem, jakiego mgby sobie yczy.


Sposb dziaania poszczeglnych wyrae znajdujcych si w tym programie przedstawia oglnie nastpujcy rysunek:

Korzystajc z tej metody, moesz wywietli dowoln liczb oddzielnych elementw.


Pamitaj jednak, e nie pojawi si one w nowych liniach, jeli nie uyjesz staej
oznaczajcej przejcie do nowej linii (endl). Za pomoc jednego wyraenia moesz
wysa do konsoli dowoln ilo elementw. Ponisza instrukcja:
cout << "To jest " << "fajny " << "program w C++.";

spowoduje na przykad wywietlenie na ekranie nastpujcego tekstu:


To jest fajny program w C++.

Rozdzia 1. Twoje pierwsze programy w C++

41

Moesz te wstawi w to zdanie znak nowej linii, jak pokazano niej:


cout << "To jest " << endl << "program w C++.";

czego efektem bdzie pojawienie si na ekranie nastpujcego tekstu:


To jest
program w C++

W przykadzie tym, podobnie jak w poprzednim, program zwraca warto. Zwracanie


wartoci jest procesem polegajcym na zwrotnym wysyaniu sygnau, w tym przypadku do systemu operacyjnego lub rodowiska programisty. Warto mona zwrci,
korzystajc z wyraenia return:
return 0;

Wartoci zwracan przez funkcj main jest kod przekazywany systemowi operacyjnemu. Warto 0 oznacza poprawne zakoczenie dziaania programu. Wszystkie przykady w tej ksice zwracaj oczywicie warto 0.
Wartoci zwracane s o wiele bardziej przydatne w przypadku innych rodzajw
funkcji, o ktrych dowiesz si z lektury rozdziau 4. Zwracanie wartoci w funkcji
main jest jedn z tych denerwujcych rzeczy, ktre wydaj si pocztkowo kompletnie bezuyteczne, ale ktre po prostu musisz robi. Zdarza si jednak, e niektre programy zwracaj wartoci inne od 0 w celu poinformowania o wystpieniu
okrelonego problemu. Na razie przyjmij, e instrukcja powodujca zwracanie 0
przez funkcj main jest jedn z tych rzeczy, ktre musisz wstawi do programu, aby
mie pewno, e jest on poprawny. Dlaczego musz to robi?, spyta dziecko.
Bo tak powiedziaem, odpowie ojciec.

WICZENIA
wiczenie 1.2.1. Usu znaki nowej linii z przykadu zaprezentowanego w tym podrozdziale, ale umie dodatkowe znaki spacji, aby adne ze sw wystpujcych w zdaniu nie byo sklejone z innym. (Wskazwka: pamitaj, e C++ nie dodaje automatycznie adnych pustych znakw pomidzy wyjciowymi acuchami tekstowymi).
Wynikiem tego dziaania powinien by nastpujcy tekst:
Jestem Blaxxon, komputer o boskiej mocy. Bj si mnie!

wiczenie 1.2.2. Zmie przykadowy kod w taki sposb, aby wywietla dodatkowe
puste wiersze midzy kadymi dwoma liniami tekstu. Innymi sowy, powiniene sprawi, aby wynik dziaania programu by wywietlany z podwjnym odstpem midzy
wierszami. (Wskazwka: wywietl dwa znaki nowej linii po kadym fragmencie acucha tekstowego).

42

C++ bez obaw

Co to jest acuch tekstowy?


Od samego pocztku uywaem wycznie tekstw umieszczonych w cudzysowie, tak jak na przykad w nastpujcym wyraeniu:
cout << "Nie bj si, C++ jest tutaj!";

Wszystko, co znajduje si poza znakami cudzysowu, jest czci skadni C++.


To, co umieszczono midzy nimi, stanowi dane.
Tak naprawd wszystkie dane przechowywane w Twoim komputerze maj
ostatecznie posta numeryczn. Zalenie jednak od tego, w jaki sposb
dane te s uywane, mog by interpretowane jako acuchy moliwych do
wydrukowania znakw tekstowych. Z tym przypadkiem mamy tu wanie do
czynienia.
Moge gdzie kiedy usysze o kodzie ASCII. Cig "Nie bj si, C++
jest tutaj"" jest przykadem danych wykorzystujcych ten kod. Znaki 'N',
'i', 'e', ' ', 'b' i kolejne s przechowywane w postaci oddzielnych bajtw, z ktrych kady reprezentuje pojedynczy znak moliwy do wydrukowania lub wywietlenia na ekranie komputera.
W rozdziale 7. napisz duo wicej na temat tego typu danych. Wan rzecz,
ktr powiniene teraz zapamita, jest to, e tekst znajdujcy si w cudzysowie jest traktowany jako dana, w przeciwiestwie do komend jzyka.
Dana tego typu uznawana jest za acuch tekstowy (znakowy), ktry w argonie informatycznym bywa rwnie okrelany angielskim terminem string.

Przechowywanie danych
zmienne w C++
Jzyk C++ nie byby zbyt uyteczny, gdyby wszystko, co moesz dziki niemu zrobi, ograniczao si do wywietlania gupich komunikatw na ekranie komputera. Zadaniem programu jest bowiem przewanie pobranie skd nowych danych skd
oznacza zwykle z wejcia konsoli, czyli od uytkownika kocowego a nastpnie
przeprowadzenie na nich jakich interesujcych dziaa.
Operacje te wymagaj zmiennych stanowicych miejsca, w ktrych moesz umieszcza dane. O zmiennych moesz myle jako o magicznych pudekach przechowujcych wartoci. Program w czasie swojego dziaania moe wedle potrzeby odczytywa, zapisywa lub zmienia te wartoci. Zaprezentowany niej przykad korzysta ze
zmiennych o nazwach ctemp i ftemp w celu przechowywania wartoci temperatur wyraonych odpowiednio w skali Celsjusza i w skali Fahrenheita.

Rozdzia 1. Twoje pierwsze programy w C++

43

W jaki sposb wartoci mog znale si w zmiennych? Jedn z metod pobierania


danych jest odczytywanie wejcia konsoli. W C++ moesz tego dokona, korzystajc
z obiektu cin, ktry oglnie rzecz biorc reprezentuje wanie wejcie konsoli.
Wraz z obiektem cin powiniene uywa operatora strumienia, ktry przedstawia przepyw danych ku prawej stronie.

Oto, co stanie si, w efekcie dziaania tego polecenia. W rzeczywistoci proces ten
jest nieco bardziej skomplikowany i wie si z nim sprawdzanie bufora wejcia, ale
punkty znajdujce si poniej opisuj w oglny sposb wszystkie operacje, ktre maj
znaczenie w przypadku naszego prostego programu:
1. Wykonywanie programu zostaje zawieszone i oczekuje on na wprowadzenie

przez uytkownika liczby.


2. Uytkownik wpisuje liczb i naciska klawisz Enter.
3. Liczba zostaje zaakceptowana i umieszczona (w naszym przypadku)
w zmiennej o nazwie ctemp.
4. Program koczy swoje dziaanie.

Jeli wic dobrze zastanowisz si, co staje si w odpowiedzi na ponisz instrukcj,


zobaczysz, e dzieje si cakiem sporo:
cin >> ctemp;

Zanim jednak bdziesz mg skorzysta ze zmiennej w C++, bdziesz musia j zadeklarowa. Zasada ta ma charakter bezwzgldny i jest jedn z cech, ktre odrniaj
C++ od innych jzykw, takich jak na przykad Basic, ktry jest do niedbay w tej
kwestii i nie wymaga adnych deklaracji. Cae pokolenia programistw pracujcych
w Basicu potrzaskay gowy o swoje terminale, gdy dowiedziay si, e masa bdw
w ich programach wynikaa ze swobody, z jak jzyk Basic traktuje kwestie deklarowania zmiennych.
W jzyku C++ musisz deklarowa kad zmienn, zanim bdziesz mg jej uy.

Aby zadeklarowa zmienn, bdziesz najpierw musia wiedzie, z jakiego typu danych skorzysta. Kwestia ta ma podstawowe znaczenie w C++, podobnie jak w wikszoci innych jzykw programowania.

44

C++ bez obaw

Wprowadzenie do typw danych


Zmienna jest czym, o czym moesz myle jako o magicznym pudeku, w ktrym
umieszczasz informacje lub raczej dane. Ale jakiego rodzaju dane mog si w nim
znajdowa?
Wszystkie dane s w ostatecznoci zapisywane przez komputer w postaci cyfrowej,
jednak w przypadku kadej z nich stosowany jest jeden z trzech podstawowych formatw: liczby cakowitej (ang. integer), liczby zmiennopozycyjnej czy te zmiennoprzecinkowej (ang. floating-point) lub acucha tekstowego (ang. text string).

Istnieje kilka rnic pomidzy formatem liczb cakowitych i zmiennopozycyjnych.


W naszym przypadku, czyli w przypadku osb rozpoczynajcych nauk programowania, zasada jest jednak prosta:
Jeeli zachodzi konieczno przechowywania liczb posiadajcych cz uamkow,
powiniene skorzysta ze zmiennej zmiennopozycyjnej. W innym przypadku naley
uy zmiennej cakowitej.

Gwnym zmiennopozycyjnym typem danych jest w C++ typ double. Nazwa ta moe si
wydawa do dziwna, ale jest to skrt od angielskiego wyraenia double-precision
floating point (liczba zmiennopozycyjna podwjnej precyzji). Istnieje rwnie typ
liczb zmiennopozycyjnych pojedynczej precyzji, czyli float, ale nie jest on zbyt czsto uywany. Gdy potrzebujesz moliwoci zapisywania liczb posiadajcych czci
uamkowe, najlepsze efekty uzyskasz, jeeli zastosujesz typ double, ktry zapewni Ci
rwnoczenie najmniejsze bdy przechowywanych wartoci.
Deklaracja zmiennej typu double ma podan poniej skadni. Zwr uwag na to, e
rwnie ta deklaracja zakoczona jest znakiem rednika (;), tak jak wikszo wyrae w jzyku C++.
double nazwa_zmiennej;

Za pomoc jednej deklaracji moesz te utworzy wiele zmiennych.


double nazwa_zmiennej1, nazwa_zmiennej2, ...;

Podane niej wyraenie spowoduje na przykad utworzenie zmiennej double o nazwie aZmp:
double aZmp;

Rozdzia 1. Twoje pierwsze programy w C++

45

Deklaracja ta powouje do ycia zmienn typu double.

Kolejne wyraenie wykorzystujce nieco bardziej skomplikowan skadni pozwala


na zadeklarowanie czterech zmiennych double o nazwach a, b, c i kwota:
double b, c, d, kwota;

Efekt tej deklaracji jest dokadnie taki sam jak w przypadku zestawu poniszych deklaracji:
double
double
double
double

b;
c;
d;
kwota;

Wynikiem tych deklaracji jest utworzenie czterech zmiennych typu double.

Dlaczego podwjna precyzja zamiast pojedynczej?


Zmienne podwjnej precyzji s bardzo podobne do zmiennych pojedynczej
precyzji, z t rnic, e te pierwsze s lepsze. Podwjna precyzja pozwala
na korzystanie z szerszego zakresu liczb i cechuje si wiksz dokadnoci. Tak, to prawda, przy uywaniu zmiennych zmiennopozycyjnych moliwa
jest utrata dokadnoci. Do tematu tego powrc jeszcze w kolejnych rozdziaach tej ksiki.
Wiksza dokadno zmiennych podwjnej precyzji jest powodem, dla ktrego jest to preferowany typ zmiennopozycyjny w jzyku C++. Przed przeprowadzeniem jakichkolwiek operacji zmiennopozycyjnych wszystkie wartoci
s konwertowane na liczby podwjnej precyzji, oczywicie tylko w takich sytuacjach, jeeli nie miay tej formy do tej pory. Rwnie stae zmiennopozycyjne s w jzyku C++ przechowywane z podwjn precyzj, chyba e wyranie okrelisz, i ma by inaczej, na przykad poprzez zapis 12.5F zamiast
zwykego 12.5.
Liczby podwjnej precyzji maj tylko jedn wad wymagaj wikszej iloci pamici; w rodowiskach komputerw osobistych zapisywane s na
przykad za pomoc omiu bajtw, w przeciwiestwie do zwykych wartoci
zmiennopozycyjnych, ktre wykorzystuj tylko cztery bajty. Nie ma to oczywicie adnego znaczenia w przypadku prostych programw, poniewa koprocesory matematyczne s w stanie wykonywa bezporednie operacje na
danych omiobajtowych. Moe si to sta problemem w przypadku duych
zbiorw danych zapisanych w postaci wartoci podwjnej precyzji, ktre
maj by przechowywane na dysku. Wtedy i tylko wtedy powiniene zastanowi si nad skorzystaniem z typu zmiennopozycyjnego pojedynczej precyzji,
czyli z typu float.

46

C++ bez obaw

Przykad 1.3. Konwertowanie temperatur


Ty z pewnoci nie masz zbyt czsto tego typu problemw, ale kady obywatel Stanw
Zjednoczonych, ktry przyjeda do Europy czy choby podruje po Kanadzie, musi
przelicza w mylach podawane w mediach wartoci temperatury wyraone w stopniach Celsjusza na stosowan w USA skal Fahrenheita. Przydatny w takich sytuacjach
okazuje si niewielki komputer lub chocia porzdny kalkulator, gdy takie urzdzenia
zdecydowanie najlepiej sprawdzaj si przy wykonywaniu tego typu zada.
Oto wzr, ktry pozwala na przeliczanie temperatury. Znak gwiazdki (*) wykorzystany
do poczenia dwch wartoci oznacza dziaanie mnoenia.
Fahrenheit = (Celsjusz * 1.8) + 3a

Dobry program nie bdzie jednak jedynie przelicza jednej wartoci temperatury i na
tym poprzestawa. Gdyby tak miao by, zdecydowanie prociej byoby skorzysta
z narzdzia Kalkulator oferowanego przez system Windows! Nie, prawdziwie uyteczny program powinien pobiera dowoln warto wejciow okrelon w skali
Celsjusza i przelicza j na odpowiadajc mu liczb w skali Fahrenheita. Zadanie to
wymaga zastosowania pewnych nowych dla Ciebie moliwoci:
t pobrania danej wejciowej od uytkownika,
t przechowania jej w zmiennej.

Oto cay program, ktry spenia do zadanie. Otwrz nowy plik rdowy, wprowad
poniszy kod, zapisz plik pod nazw konwersja1.cpp, a nastpnie skompiluj go i uruchom.
konwersja1.cpp
#include <iostream>
using namespace std;
int main() {
double ctemp, ftemp;
cout << "Wprowad temperatur wyraon w skali Celsjusza i nacinij klawisz
Enter: ";
cin >> ctemp;
ftemp = (ctemp * 1.8) + 3a;
cout << "Temperatura w skali Fahrenheita wynosi: " << ftemp;
}

return 0;

Program bdzie znacznie prostszy do zrozumienia, gdy dodasz do niego komentarze,


ktre w C++ oznacza si podwjnym znakiem ukonika (//). Komentarze stanowi
elementy kodu, ktre s zupenie ignorowane przez kompilator jzyka, co oznacza,
e nie maj one adnego wpywu na sposb dziaania programu, bardzo przydaj si
jednak czytajcym go ludziom. Poniej znajdziesz ten sam kod, lecz z wprowadzonymi komentarzami.

Rozdzia 1. Twoje pierwsze programy w C++

47

konwersja2.cpp
#include <iostream>
using namespace std;
int main() {
double ctemp, ftemp;
// Proba o wprowadzenie wejciowej wartoci temperatury i zapisanie jej w zmiennej ctemp
// (temperatura w skali Celsjusza).
cout << "Wprowad temperatur wyraon w skali Celsjusza i nacinij klawisz
Enter: ";
cin >> ctemp;
// Obliczenie wartoci zmiennej ftemp (temperatura w skali Fahrenheita) oraz wywietlenie jej na ekranie.
ftemp = (ctemp * 1.8) + 3a;
cout << "Temperatura w skali Fahrenheita wynosi: " << ftemp;
}

return 0;

Ta skomentowana wersja kodu jest co prawda duo prostsza do odczytania i zrozumienia przez czowieka, jednak napisanie jej zajmuje wicej czasu. Wprowadzajc
kody przykadw znajdujce si w dalszej czci tej ksiki, zawsze bdziesz spokojnie mg pomin komentarze lub doda je pniej. Pamitaj jednak o podstawowej
zasadzie dotyczcej komentarzy:
Kod C++ zaczynajcy si od dwch znakw ukonika (//) stanowi komentarz i jako
taki jest zupenie ignorowany przez kompilator jzyka a do samego koca linii,
w ktrej si znajduje.

Wprowadzanie komentarzy nie jest wymagane, ale stanowi bardzo dobr praktyk,
szczeglnie jeli ktokolwiek, w tym rwnie Ty sam, ma w pniejszym czasie przeglda napisany przez Ciebie kod C++.

Jak to dziaa?
Pierwsze wyraenie znajdujce si w funkcji main to deklaracja zmiennych typu double
o nazwach ctemp i ftemp, ktre przechowuj odpowiednie wartoci temperatur w skalach Celsjusza i Fahrenheita.
double ctemp, ftemp;

Daje nam to dwa miejsca, w ktrych bdziemy mogli przechowywa liczby. Dziki
temu, e zmienne zostay zadeklarowane jako double, mona w nich umieszcza
wartoci uamkowe. Pamitaj, e double oznacza dan zmiennopozycyjn podwjnej
precyzji.

48

C++ bez obaw

Kolejne dwa wyraenia zachcaj uytkownika do wprowadzenia danej i powoduj


umieszczenie jej w zmiennej ctemp. Zamy, e osoba korzystajca z programu podaa liczb 10. Oznacza to bdzie, e w zmiennej ctemp znajdzie si warto 10.0.

We wasnych programach moesz korzysta z podobnych wyrae w celu wywietlania komunikatu z prob o podanie danych i pobierania do zmiennych wartoci wejciowych. Zachta ta bywa bardzo potrzebna, poniewa bez niej uytkownik moe nie
wiedzie, co i kiedy powinien zrobi.
Mimo e liczba zostaa podana w postaci 10, przechowywana jest jako warto 10.0.
W czysto matematycznym sensie liczby 10 i 10.0 s sobie rwne, jednak w przypadku C++ zapis 10.0 oznacza, e warto jest przechowywana w postaci zmiennopozycyjnej, nie za jako liczba cakowita. To z kolei ma do istotne konsekwencje, ktre wytumacz Ci w nastpnym rozdziale.

Kolejne wyraenie przeprowadza waciw konwersj, wykorzystujc w tym celu


warto zapisan w zmiennej ctemp do obliczenia wartoci ftemp:
ftemp = (ctemp * 1.8) + 3a;

Instrukcja ta zawiera przypisanie. Warto znajdujca si z prawej strony znaku


przypisania (=) jest obliczana, a nastpnie kopiowana do zmiennej widocznej z lewej
strony tego znaku. Wyraenie to jest jednym z najbardziej powszechnych polece
wystpujcych w programach C++.

Rozdzia 1. Twoje pierwsze programy w C++

49

Zamy ponownie, e wartoci podan przez uytkownika jest liczba 10. Poniszy
diagram przedstawia sposb, w jaki dane bd przepyway w programie.

Na koniec program wywietla wynik swojego dziaania. W naszym przypadku bdzie


to liczba 50.

Wariacje na temat przykadu


Jeli uwanie przyjrzysz si ostatniemu przykadowi, zaczniesz si zapewne zastanawia, czy na pewno potrzebne jest deklarowanie dwch zmiennych i czy tego samego
efektu nie daoby si uzyska, korzystajc tylko z jednej.
Tak si skada, e jest to moliwe. Witamy w wiecie optymalizacji. Kolejna wersja
przykadu stanowi poprawk poprzedniej, a rnica midzy nimi polega na wyeliminowaniu zmiennej ftemp oraz poczeniu krokw konwersji i wywietlania wyniku
w jedno dziaanie. Sposb ten nie zawsze bdzie si rwnie dobrze sprawdza, gdy
w bardziej skomplikowanych programach konieczne moe si okaza przechowanie
obliczonej wartoci temperatury w celu dalszych oblicze. Jednak tutaj dziaa to wprost
idealnie.
konwersja3.cpp
#include <iostream>
using namespace std;
int main() {

50

C++ bez obaw


// Deklaracja ctemp jako zmiennej zmiennopozycyjnej.
double ctemp;
// Proba o wprowadzenie wejciowej wartoci temperatury i zapisanie jej w zmiennej ctemp
// (temperatura w skali Celsjusza).
cout << "Wprowad temperatur wyraon w skali Celsjusza i nacinij klawisz
Enter: ";
cin >> ctemp;
// Obliczenie wartoci zmiennej ftemp (temperatura w skali Fahrenheita) oraz wywietlenie jej na ekranie.
cout << "Temperatura w skali Fahrenheita wynosi: " << (ctemp * 1.8) + 3a;
}

return 0;

Czy w tym momencie zauwaye ju pewien schemat dziaania wicy si z pisaniem programw? W przypadku najprostszych aplikacji jest on zwykle nastpujcy:
1. Deklaracja zmiennych.
2. Pobranie danych wejciowych od uytkownika po wywietleniu odpowiedniej

zachty.
3. Przeprowadzenie waciwych oblicze i wywietlenie otrzymanych wynikw.

Nastpny program spenia na przykad zupenie inne zadanie, ale jego kod powinien
Ci si wydawa do znajomy. Aplikacja ta prosi o podanie liczby, a nastpnie wywietla kwadrat jej wartoci, czyli liczb przemnoon przez sam siebie. Wyraenia
s podobne do instrukcji wchodzcych w skad poprzedniego przykadu. Jedyn rnic jest tutaj tak naprawd nazwa zmiennej (n) oraz konkretne dziaanie, ktre jest
wykonywane przez program (n * n).
kwadrat.cpp
#include <iostream>
using namespace std;
int main() {
// Deklaracja n jako zmiennej zmiennopozycyjnej.
double n;
// Proba o podanie wartoci n i zapisanie tej wartoci w zmiennej.
cout << "Wprowad liczb i nacinij klawisz Enter: ";
cin >> n;
// Obliczenie i wywietlenie kwadratu liczby.
cout << "Kwadrat liczby wynosi: " << n * n;
}

return 0;

Rozdzia 1. Twoje pierwsze programy w C++

51

WICZENIA
wiczenie 1.3.1. Zmie kod przykadowego programu w taki sposb, aby przeprowadza dziaanie odwrotne, to znaczy konwertowa wejciow warto temperatury
podan w skali Fahrenheita (ftemp) na liczb wyraon w skali Celsjusza (ctemp), a nastpnie wywietla uzyskany wynik. (Wskazwka: wzr na odwrotn konwersj jest
nastpujcy: ctemp = (ftemp f 32) - 1.8).
wiczenie 1.3.2. Napisz program zmieniajcy temperatur ze skali Fahrenheita na
warto w skali Celsjusza, tak aby korzysta on z tylko jednej zmiennej. Zadanie polega
tu na optymalizacji programu z wiczenia 1.3.1.
wiczenie 1.3.3. Napisz program, ktry pobiera od uytkownika pewn warto, umieszcza j w zmiennej n, a nastpnie wywietla szecian, czyli trzeci potg (n * n * n)
podanej liczby. Pamitaj, aby w wyraeniu wywietlajcym obliczon warto uy
sowa szecian zamiast kwadrat.
wiczenie 1.3.4. Zmie kod przykadu kwadrat.cpp, korzystajc ze zmiennej o nazwie
liczba zamiast n. Upewnij si, e zastpie nazw n now we wszystkich miejscach,
w ktrych si ona pojawia.

Sowo na temat nazw zmiennych


i sw kluczowych
W tym rozdziale wystpoway zmienne ctemp, ftemp oraz n. W wiczeniu 1.3.4 zasugerowaem Ci moliwo zastpienia zmiennej n zmienn o nazwie liczba, ktra bdzie
dziaa naleycie, jeli tylko konsekwentnie podmienisz dokadnie wszystkie wystpienia nazwy n znajdujce si w programie. A zatem liczba moe by rwnie dobr
nazw jak uywana wczeniej nazwa n.
Mogem oczywicie wybra inn z bezliku moliwych nazw zmiennych zamiast nazwy
n czy liczba. Mgbym na przykad nada zmiennej nazw tak jak terminator2003,
robotZabojca czy WojewodaKatowicki.

Jakie nazwy s zatem dopuszczalne, a ktrych nie moesz uywa w przypadku zmiennych? Odpowied jest prosta: moesz korzysta z kadej nazwy, jaka tylko przyjdzie Ci
do gowy, pod warunkiem e bdzie ona speniaa nastpujce wymagania:
t Pierwszy znak nazwy musi by liter. Nie moe by cyfr. Technicznie rzecz
biorc, pierwszym znakiem nazwy zmiennej moe by znak podkrelenia (_),

jednak biblioteki C++ uywaj takiej wanie konwencji wewntrznej, lepiej


wic bdzie unika nazw rozpoczynajcych si w ten sposb.
t Pozostaa cz nazwy moe skada si z liter, cyfr lub znakw podkrelenia (_).
t Musisz unika sw, ktre maj ju swoje predefiniowane znaczenie w C++.

52

C++ bez obaw

Te sowa o specjalnym zastosowaniu w C++ nosz nazw sw kluczowych. Wyrniamy tu na przykad nazwy standardowych typw danych jzyka C++, takich jak
int, float i double. Do innych nale sowa if, else, while, do, switch oraz class.
Nie musisz teraz siada i uczy si wszystkich sw kluczowych jzyka C++, mimo
e wiele podrcznikw programowania sugeruje Ci takie wanie dziaanie! Powiniene jedynie wiedzie, e prba uycia nazwy zastrzeonej dla ktrego ze sw kluczowych C++ spowoduje wygenerowanie przez kompilator odpowiedniego komunikatu bdu, w ktrym bdzie mowa o konflikcie nazw lub bdzie skadni. W takim
przypadku bdziesz po prostu musia sprbowa skorzysta z innej nazwy.

WICZENIE
wiczenie 1.3.5. Ktre ze sw znajdujcych si na poniszej licie s poprawnymi
nazwami zmiennych w jzyku C++, a ktre nie mog nimi by? Sprawd to, korzystajc z podanych przed chwil regu.
x
x1
PanZloWcielone
UlicaMoczymordki16
16UlicaMoczymordki
Robot_Robercik
Robot+Robercik
CoDoJasnej???
kwota
licznika
Licznikapiec
5licznik
main
maina

Podsumowanie rozdziau 1.
Oto najwaniejsze rzeczy, ktre pojawiy si w tym rozdziale:
t Tworzenie programu zaczyna si od napisania kodu rdowego C++.

Skada si on z wyrae jzyka C++, ktre przypominaj nieco zdania


zapisane w jzyku angielskim. Kod maszynowy, dla odmiany, jest zupenie
niezrozumiay dla zwykego miertelnika, dopki mozolnie nie sprawdzi on
znaczenia kadej kolejnej kombinacji zer i jedynek. Zanim jednak program
bdzie mg zosta uruchomiony, musi zosta przetumaczony na kod
maszynowy, ktry jest jedynym zapisem zrozumiaym dla komputera.
t Proces tumaczenia wyrae jzyka C++ na kod maszynowy nosi nazw

kompilacji.

Rozdzia 1. Twoje pierwsze programy w C++


t Program po skompilowaniu musi zosta poczony ze standardowymi

funkcjami przechowywanymi w bibliotece C++. Proces ten nosi nazw


linkowania, czenia lub konsolidacji. Po pomylnym przeprowadzeniu
tej operacji otrzymasz dziaajcy program.
t Na szczcie, jeli dysponujesz rodowiskiem programisty, proces

kompilowania i czenia aplikacji, zwany te budowaniem programu,


moe by zautomatyzowany, dziki czemu Twoim jedynym zadaniem
na tym etapie bdzie nacinicie odpowiedniego klawisza funkcyjnego.
t Prosty program napisany w jzyku C++ ma nastpujc form:
#include <iostream>
using namespace std;
int main() {
Tutaj_wprowad_swoje_wyraenia!
return 0;
}

t Do wywietlania danych na ekranie moesz wykorzysta obiekt cout,

tak jak zostao to przedstawione w poniszym przykadzie:


cout << "Nie bj si, C++ jest tutaj!";

t Aby wywietli na ekranie tekst i przej do nowej linii, powiniene


skorzysta z obiektu cout i znaku nowej linii (endl), tak jak zostao to

zrobione w nastpujcej instrukcji:


cout << "Nie bj si, C++ jest tutaj!" << endl;

t Niemal kade wyraenie w jzyku C++ koczy si znakiem rednika (;).

Jedynym wyjtkiem s tu dyrektywy preprocesora, po ktrych nie naley


stawia tego znaku.
t Dwa znaki ukonika (//) wskazuj, e znajdujcy si po nich tekst stanowi

komentarz. Wszystkie znaki wchodzce w jego skad a do koca linii bd


zatem ignorowane przez kompilator i stanowi bd jedynie pomocny opis
programu przeznaczony dla osb, ktre podejm prb zrozumienia jego
dziaania lub bd odpowiedzialne za konserwacj kodu i naprawianie
w nim bdw.
t Kada zmienna musi by zadeklarowana przed pierwszym uyciem.

Oto przykad:
double x; // Deklaracja x jako zmiennej typu zmiennopozycyjnego.

t Zmienne, ktre mog mie warto uamkow, powinny by deklarowane


jako dane typu double, czyli wartoci zmiennopozycyjne podwjnej precyzji.
Typ zmiennopozycyjny pojedynczej precyzji (float) powinien by uywany

jedynie w sytuacjach, gdy bdzie istniaa konieczno zapisywania na dysku


duych zbiorw danych zmiennopozycyjnych, a wic w sytuacjach, kiedy
oszczdno pamici masowej ma due znaczenie.

53

54

C++ bez obaw


t Aby pobra dane wejciowe z klawiatury i umieci je w zmiennej, moesz
skorzysta z obiektu cin. Przykadem moe tu by nastpujca instrukcja:
cin >> x;

t Dan moesz umieci w zmiennej, korzystajc z operatora przypisania (=).

Operator ten powoduje obliczenie wartoci wyraenia znajdujcego si po


prawej stronie znaku rwnoci (=) i zapisanie tej wartoci w zmiennej, ktra
figuruje po jego lewej stronie. Przykadem przypisania moe by nastpujce
polecenie:
x = y * a; // Przemnoenie wartoci y przez liczb 2 i umieszczenie wyniku w zmiennej x.

You might also like