R02-06.DOC

(114 KB) Pobierz
Szablon dla tlumaczy

Rozdział 2.
Anatomia programu C++

Programy C++ składają się z obiektów, funkcji, zmiennych i innych elementów składowych. Większość tej książki jest poświęcona dogłębnemu stanowi obszerny opisowi tych elementów, ale byjednakże w celu zrozumiećnia zasad ich współdziałania, jak one do siebie pasują, musisz najpierw poznać pełny cały działający program.

W tym rozdziale:

·          Ppoznasz elementy programu C++,.

·          Ddowiesz się, jak te elementy ze sobą współpracują,.

·          Ddowiesz 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 zawiera przypomnieniena treścić 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]

 

Analiza:

W linii 0. do bieżącego pliku jest dołączany plik iostream.

Oto jak tosposó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 omówiony 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 w 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ę. Preprocesor tłumaczyPonadto 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() jest pod tym względem specjalnaodbiega od standardu. Gdy program rozpoczyna działanie, funkcja main() 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 zwracanej przez funkcję main() w programie HELLO.cpp jest typ int, cto oznacza że po zakończeniu działania ta 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() była 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 normalnie 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 zawartość treść programu znajduje się w linii 4. Obiekt cout jest używany do wypisywania komunikatów na ekranie. Obiektami zajmiemy się ogólnie 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ą bibliotekę. 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 sobie w następnych rozdziałach.

Oto jak sposób używanycia jest 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 znaków.

Dwa ostatnie znaki, \n, informują obiekt cout , by po słowach Witaj Świecie! umieścił nową linię. Ten specjalny kod zostanie wyjaśniony 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 właściwie, 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 dane 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 wyjątkiem tegotym, ż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,; wymagający by 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 zawartości pliku iostream. 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). To, 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 informacyjny komunikat informacyjny, po czym (w linii 8.) następuje użyciety zostaje manipulatora 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”.

...

Zgłoś jeśli naruszono regulamin