r02.pdf
(
245 KB
)
Pobierz
Szablon dla tlumaczy
Rozdział 2.
Anatomia programu C++
Programy C++ składają się z obiektów, funkcji, zmiennych i innych elementów. Większość tej
książki stanowi obszerny opis tych elementów, jednakże w celu zrozumienia zasad ich
współdziałania, musisz najpierw poznać cały działający program.
W tym rozdziale:
•
poznasz elementy programu C++,
•
dowiesz się, jak te elementy ze sobą współpracują,
•
dowiesz się, czym jest funkcja i do czego służy.
Prosty program
Nawet prosty program
HELLO.cpp
z rozdziału pierwszego, „Zaczynamy”, miał wiele
interesujących elementów. W tym podrozdziale omówimy go bardziej szczegółowo. Listing 2.1
przypomina treść programu
HELLO.cpp
z poprzedniego rozdziału.
Listing 2.1.
HELLO.cpp
demonstruje elementy programu C++
0: #include <iostream>
1:
2: int main()
3: {
4: std::cout << "Witaj Swiecie!\n";
5: return 0;
6: }
Wynik działania
Witaj Swiecie!
1
1
W środowisku programowania takim, jak np. Visual, pod napisem
Witaj Swiecie!
pojawi się
dodatkowo napis:
Press any key to continue
. Naciśnięcie jakiegokolwiek klawisza zamknie
działanie programu HELLO.exe i usunie z ekranu jego okno (ramkę). —
przyp.redakcji.
Analiza:
W linii 0. do bieżącego pliku jest dołączany plik
iostream
.
Oto sposób jego działania: pierwszy znak jest symbolem
#
, który stanowi sygnał dla preprocesora.
Za każdym razem gdy uruchamiasz kompilację, uruchamiany jest preprocesor. Preprocesor
odczytuje kod źródłowy, wyszukując linii zaczynających się od znaku
#
(hasz) i operuje na nich
jeszcze przed uruchomieniem właściwego kompilatora. Preprocesor zostanie szczegółowo opisany
w rozdziale 21., „Co dalej.”
Polecenie
#include
jest instrukcją preprocesora, mówiącą mu: „Po mnie następuje nazwa pliku.
Znajdź ten plik i wstaw go w to miejsce.” Nawiasy kątowe dookoła nazwy pliku informują
preprocesor, by szukał pliku w standardowych miejscach dla tego typu plików. Jeśli twój
kompilator jest odpowiednio skonfigurowany, nawiasy kątowe powodują, że preprocesor szuka
pliku
iostream
w kartotece zawierającej wszystkie pliki nagłówkowe dostarczane wraz z
kompilatorem. Plik
iostream
(Input Output Stream — strumień wejścia-wyjścia) jest używany
przez obiekt
cout
, asystujący przy wypisywaniu tekstu na ekranie. Efektem działania linii 0. jest
wstawienie zawartości pliku
iostream
do kodu programu, tak jakby został on wpisany przez ciebie.
Preprocesor działa przed każdym rozpoczęciem kompilacji, poprzedzając jej właściwą fazę.
Ponadto zamienia wszystkie linie rozpoczynające się od znaku hasz (
#
) na specjalne polecenia,
przygotowując ostateczny kod źródłowy dla kompilatora.
Linia 2. rozpoczyna rzeczywisty program od funkcji o nazwie
main()
. Funkcję tę posiada każdy
program C++. Funkcja jest blokiem kodu wykonującym jedną lub więcej operacji. Zwykle funkcje
są wywoływane przez inne funkcje, lecz funkcja
main()
pod tym względem odbiega od standardu.
Gdy program rozpoczyna działanie, jest ona wywoływana automatycznie.
Funkcja
main ()
, podobnie jak inne funkcje, musi określić rodzaj zwracanej przez siebie
wartości. Typem zwracanej przez nią w programie
HELLO.cpp
wartości jest typ
int
, to oznacza
że po zakończeniu działania funkcja ta zwraca systemowi operacyjnemu wartość całkowitą (ang.
integer
). W tym przypadku zwracaną wartością jest
0
, tak jak to widzimy w linii 5. Zwrócenie
wartości systemowi operacyjnemu jest stosunkowo mało ważną i rzadko wykorzystywaną
możliwością, ale standard C++ wymaga, by funkcja
main()
została zadeklarowana tak jak
pokazano.
UWAGA Niektóre kompilatory pozwalają na deklarację
main()
, jeśli funkcja
main
ma zwracać
typ
void
. Nie jest to zgodne ze standardem C++ i nie powinieneś się do tego przyzwyczajać.
Niech funkcja
main()
zwraca wartość typu
int
, zaś w ostatniej linii tej funkcji po prostu
zwracaj wartość
0
.
UWAGA Niektóre systemy operacyjne umożliwiają sprawdzanie (testowanie), jaka wartość
została zwrócona przez program. Zgodnie z konwencją, zwrócenie wartości
0
oznacza, że
program zakończył działanie normalnie.
Wszystkie funkcje rozpoczynają się od nawiasu otwierającego (
{
) i kończą nawiasem
zamykającym (}). Nawiasy dla funkcji
main()
znajdują się w liniach 3. i 6. Wszystko, co
znajduje się pomiędzy nawiasem otwierającym a zamykającym, jest uważane za treść funkcji.
Prawdziwa treść programu znajduje się w linii 4. Obiekt
cout
jest używany do wypisywania
komunikatów na ekranie. Obiektami zajmiemy się w rozdziale 6., „Programowanie zorientowane
obiektowo”, zaś obiekt
cout
i powiązany z nim obiekt
cin
omówimy szczegółowo w rozdziale
17., „Strumienie.” Te dwa obiekty,
cin
i
cout
, są w C++ używane, odpowiednio: do obsługi
wejścia (na przykład z klawiatury) oraz wyjścia (na przykład na ekran).
Obiekt
cout
jest dostarczany przez bibliotekę standardową. Biblioteka jest kolekcją klas.
Standardowa biblioteka jest standardową kolekcją dostarczaną wraz z każdym kompilatorem
zgodnym z ANSI.
Używając specyfikatora przestrzeni nazw,
std
, informujemy kompilator, że obiekt
cout
jest
częścią biblioteki standardowej. Ponieważ możesz mieć kilka, pochodzących od różnych
dostawców, obiektów o tych samych nazwach, C++ dzieli „świat” na „przestrzenie nazw”.
Przestrzeń nazw jest sposobem na powiedzenie, że: „gdy mówię
cout
, mam na myśli to, że
cout
jest częścią standardowej przestrzeni nazw, a nie jakiejś innej przestrzeni nazw.” Mówimy to
kompilatorowi poprzez umieszczenie przed nazwą
cout
znaków
sdt
i podwójnego dwukropka.
Więcej na temat różnych przestrzeni nazw powiemy w następnych rozdziałach.
Oto sposób użycia obiektu
cout
: wpisz słowo
cout
, a po nim operator przekierowania wyjścia
(
<<
). To, co następuje po operatorze przekierowania wyjścia, zostanie wypisane na ekranie. Jeśli
chcesz, by został wypisany łańcuch znaków, pamiętaj o ujęciu go w cudzysłowy (tak jak widzimy
w linii 4.)
Łańcuch tekstowy jest serią znaków drukowalnych.
Dwa ostatnie znaki,
\n
, informują obiekt
cout
, by po słowach „Witaj Świecie!” umieścił nową
linię. Ten specjalny kod zostanie opisany szczegółowo podczas omawiania obiektu
cout
w
rozdziale 18., „Przestrzenie nazw.”
Funkcja
main()
kończy się w linii 6. nawiasem zamykającym.
Rzut oka na klasę cout
W rozdziale 17. zobaczysz, w jaki sposób używa się obiektu
cout
do wypisywania danych na
ekranie. Na razie możesz z niego korzystać, nie wiedząc, jak działa. Aby wypisać wartość na
ekranie, napisz słowo
cout
, po nim operator wstawiania (
<<
), uzyskiwany w wyniku
dwukrotnego wpisania znaku mniejszości (
<
). Choć w rzeczywistości są to dwa znaki, C++
traktuje je jako pojedynczy symbol.
Po znaku wstawiania wpisz przeznaczone do wypisania dane. Listing 2.2 ilustruje sposób użycia
tego obiektu. Wpisz w tym przykładzie dokładnie to, co pokazano na listingu, z tym, że zamiast
nazwiska Jesse Liberty wpisz swoje własne (chyba, że rzeczywiście nazywasz się
Jesse Liberty
).
Listing 2.2. Użycie
cout
0: // Listing 2.2 użycie std::cout
1: #include <iostream>
2: int main()
3: {
4: std::cout << "Hej tam.\n";
5: std::cout << "To jest 5: " << 5 << "\n";
6: std::cout << "Manipulator std::endl ";
7: std::cout << "wypisuje nowa linie na ekranie.";
8: std::cout << std::endl;
9: std::cout << "To jest bardzo duza liczba:\t" << 70000;
10: std::cout << std::endl;
11: std::cout << "To jest suma 8 i 5:\t";
12: std::cout << 8+5 << std::endl;
13: std::cout << "To jest ulamek:\t\t";
14: std::cout << (float) 5/8 << std::endl;
15: std::cout << "I bardzo, bardzo duza liczba:\t";
16: std::cout << (double) 7000 * 7000 << std::endl;
17: std::cout << "Nie zapomnij zamienic Jesse Liberty ";
18: std::cout << "na swoje nazwisko...\n";
19: std::cout << "Jesse Liberty jest programista C++!\n";
20: return 0;
21: }
Wynik działania
Hej tam.
To jest 5: 5
Manipulator std::endl wypisuje nowa linie na ekranie.
To jest bardzo duza liczba: 70000
To jest suma 8 i 5: 13
To jest ulamek: 0.625
I bardzo, bardzo duza liczba: 4.9e+007
Nie zapomnij zamienic Jesse Liberty na swoje nazwisko...
Jesse Liberty jest programista C++!
UWAGA Niektóre kompilatory zawierają błąd; przed przekazaniem sumy do obiektu
cout
należy umieścić ją w nawiasach. Tak więc linia 12. powinna być zmieniona na:
12 std::cout << (8+5) << std::endl;
Analiza:
W linii 1., instrukcja
#include <iostream>
powoduje włączenie zawartości pliku
iostream
do
kodu źródłowego. Jest ona wymagana, jeśli używasz obiektu
cout
i powiązanych z nim funkcji.
W linii 4. znajduje się najprostsze zastosowanie obiektu
cout
, do wypisania ciągu znaków.
Symbol
\n
jest specjalnym znakiem formatującym. Informuje on
cout
by wypisał na ekranie znak
nowej linii (tzn. aby dalsze wypisywanie rozpoczął od następnej linii ekranu).
W linii 5. przekazujemy do
cout
trzy wartości, oddzielone operatorem wstawiania. Pierwszą z
tych wartości jest łańcuch
"To jest 5: "
. Zwróć uwagę na odstęp po dwukropku. Ten odstęp
(spacja) jest częścią łańcucha. Następnie do operatora wstawiania jest przekazywana wartość
5
oraz znak nowej linii (zawsze w cudzysłowach lub apostrofach), co powoduje wypisanie na
ekranie linii
To jest 5: 5
Ponieważ po pierwszym łańcuchu nie występuje znak nowej linii, następna wartość jest
wypisywana tuż za nim. Nazywa się to konkatenacją (łączeniem) dwóch wartości.
W linii 6. wypisywany jest komunikat informacyjny, po czym (w linii 8.) użyty zostaje
manipulator
endl
. Przeznaczeniem
endl
jest wypisanie nowej linii na ekranie. (Inne
zastosowania dla
endl
zostaną omówione w rozdziale 16.). Zwróć uwagę, że
endl
także
pochodzi z biblioteki standardowej.
UWAGA
endl
pochodzi od słów „end line” (zakończ linię) i w rzeczywistości jest to „end-L”, a
nie „end-jeden”.
W linii 9. został wprowadzony nowy znak formatujący,
\t
. Powoduje on wstawienie znaku
tabulacji i jest używany w celu wyrównywania wydruków wyników w liniach od 9. do 15. Linia 9.
pokazuje, że wypisywane mogą być nie tylko liczby całkowite, ale także długie liczby całkowite.
Linia 12. demonstruje, że
cout
potrafi wykonać proste dodawanie. Do obiektu jest przekazywana
wartość
8+5
, lecz wypisywana jest suma 13.
W linii 14. do
cout
jest wstawiana wartość
5/8
. Symbol
(float)
informuje
cout
, że chcemy
aby ta wartość została obliczona jako rozwinięcie dziesiętne, więc wypisywany jest ułamek. W
linii 16.
cout
otrzymuje wartość
7000 * 7000
, zaś symbol
(double)
służy do poinformowania
cout
, że jest to wartość zmiennoprzecinkowa. Wszystko to zostanie wyjaśnione w rozdziale 3.,
„Zmienne i stałe,” przy okazji omawiania typów danych.
W linii 16. podstawiłeś swoje nazwisko, zaś wynik potwierdza, że naprawdę jesteś programistą
C++. Musi być to prawda, skoro tak uważa komputer!
Używanie przestrzeni nazw standardowych
Z pewnością zauważyłeś, że przed każdym
cout
i
endl
występuje
std::
, co po jakimś czasie
może być irytujące. Choć korzystanie z odnośnika do przestrzeni nazw jest poprawne, jednak
okazuje się dosyć żmudne przy wpisywaniu. Standard ANSI oferuje dwa rozwiązania tego
niewielkiego problemu.
Pierwszym z nich jest poinformowanie kompilatora (na początku listingu kodu) że będziemy
używać
cout
i
endl
z biblioteki standardowej, tak jak pokazano na listingu 2.3.
Listing 2.3. Użycie słowa kluczowego
using
0: // Listing 2.3 - użycie słowa kluczowego "using"
1: #include <iostream>
2: int main()
3: {
Plik z chomika:
Wojteczek
Inne pliki z tego folderu:
rdodc.pdf
(84 KB)
rdodb.pdf
(72 KB)
rdoda.pdf
(184 KB)
r21.pdf
(370 KB)
r20.pdf
(275 KB)
Inne foldery tego chomika:
Cisco
Kurs C++ od zera do hackera v. 1.0
Pascal
ZAHASŁOWANE
Zgłoś jeśli
naruszono regulamin