C++ Bez Obaw
C++ Bez Obaw
C++ Bez Obaw
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
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: [email protected]
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
Spis treci
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
10
10
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
11
12
Dodatek F
12
Rozdzia 1.
22
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.
23
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.
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
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
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.
27
28
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
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.
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.
30
31
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
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.
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.
wyswietlanie1.cpp
#include <iostream>
using namespace std;
int main(){
cout << "Nie bj si, C++ jest tutaj!";
return 0;
}
34
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!
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
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
klawisz Enter:
exit
35
Aby zbudowa program, powiniene jedynie nacisn klawisz F7. Spowoduje to uruchomienie zarwno kompilatora, jak i programu czcego.
36
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.
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
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
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.
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;
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.
40
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;
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!
41
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
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.
43
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
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
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;
Podane niej wyraenie spowoduje na przykad utworzenie zmiennej double o nazwie aZmp:
double aZmp;
45
Efekt tej deklaracji jest dokadnie taki sam jak w przypadku zestawu poniszych deklaracji:
double
double
double
double
b;
c;
d;
kwota;
46
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;
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
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.
49
Zamy ponownie, e wartoci podan przez uytkownika jest liczba 10. Poniszy
diagram przedstawia sposb, w jaki dane bd przepyway w programie.
50
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;
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.
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 (_),
52
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++.
kompilacji.
Oto przykad:
double x; // Deklaracja x jako zmiennej typu zmiennopozycyjnego.
53
54