BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 5 | UU: 206

Kod programu

 

Naturalnie, teraz przyjrzymy się bliżej naszemu elementarnemu projektowi, przy okazji odkrywając najważniejsze aspekty programowania w C++.

Komentarze

Pierwsza linijka:

// First - pierwszy program w C++

to komentarz , czyli dowolny opis słowny. Jest on całkowicie ignorowany przez kompilator, natomiast może być pomocny dla piszącego i czytającego kod.

Komentarze piszemy w celu wyjaśnienia pewnych fragmentów kodu programu, oddzielenia jednej jego części od drugiej, oznaczania funkcji i modułów itp. Odpowiednia ilość komentarzy ułatwia zrozumienie kodu, więc stosuj je często :)

W C++ komentarze zaczynamy od // (dwóch slashy):

// To jest komentarz

lub umieszczamy je między /* i */ , na przykład:

/* Ten komentarz może być bardzo długi
i składać się z kilku linijek. */

 

W moim komentarzu do programu umieściłem jego tytuł 1 oraz krótki opis; będę tę zasadę stosował na początku każdego przykładowego kodu. Oczywiście, ty możesz komentować swoje źródła wedle własnych upodobań, do czego cię gorąco zachęcam :D

Funkcja main()

Kiedy uruchamiamy nasz program, zaczyna on wykonywać kod zawarty w funkcji main() . Od niej więc rozpoczyna się działanie aplikacji - a nawet więcej: na niej też to działanie się kończy. Zatem program (konsolowy) to przede wszystkim kod zawarty w funkcji main() - determinuje on bezpośrednio jego zachowanie.

W przypadku rozważanej aplikacji funkcja ta nie jest zbyt obszerna, niemniej zawiera wszystkie niezbędne elementy.
Najważniejszym z nich jest nagłówek , który u nas prezentuje się następująco:

void main()

Występujące na początku słowo kluczowe void mówi kompilatorowi, że nasz program nie będzie informował systemu operacyjnego o wyniku swojego działania. Niektóre programy robią to poprzez zwracanie liczby - zazwyczaj zera w przypadku braku błędów i innych wartości, gdy wystąpiły jakieś problemy. Nam to jest jednak zupełnie niepotrzebne - w końcu nie wykonujemy żadnych złożonych operacji, zatem nie istnieje możliwość jakiekolwiek niepowodzenia 2 .

Gdybyśmy jednak chcieli uczynić systemowi zadość, to powinniśmy zmienić nagłówek na int main() i na końcu funkcji dopisać return 0 ; - a więc poinformować system o sukcesie operacji. Jak jednak przekonaliśmy się wcześniej, nie jest to niezbędne.

Po nagłówku występuje nawias otwierający { . Jego główna rola to informowanie kompilatora, że "tutaj coś się zaczyna". Wraz z nawiasem zamykającym } tworzy on blok kodu - na przykład funkcję. Z takimi parami nawiasów będziesz się stale spotykał; mają one znaczenie także dla programisty, gdyż porządkują kod i czynią go bardziej czytelnym.

Przyjęte jest, iż następne linijki po nawiasie otwierającym { , aż do zamykającego } , powinny być przesunięte w prawo za pomocą wcięć (uzyskiwanych spacjami lub klawiszem TAB). Poprawia to oczywiście przejrzystość kodu, lecz pamiętanie o tej zasadzie podczas pisania może być uciążliwe. Na szczęście dzisiejsze środowiska programistyczne są na tyle sprytne, że same dbają o właściwe umieszczanie owych wcięć. Nie musisz więc zawracać sobie głowy takimi błahostkami - grunt, żeby wiedzieć, komu należy być wdzięcznym ;))

Takim oto sposobem zapoznaliśmy się ze strukturą funkcji main() , będącej główną częścią programu konsolowego w C++. Teraz czas zająć się jej zawartością i dowiedzieć się, jak i dlaczego nasz program działa :)

Pisanie tekstu w konsoli

Mieliśmy okazję się przekonać, że nasz program pokazuje nam komunikat podczas działania. Nietrudno dociec, iż odpowiada za to ta linijka:

std::cout << "Hurra! Napisalem pierwszy program w C++!" << std::endl;

std::cout oznacza tak zwany strumień wyjścia . Jego zadaniem jest wyświetlanie na ekranie konsoli wszystkiego, co doń wyślemy - a wysyłać możemy oczywiście tekst. Korzystanie z tego strumienia umożliwia zatem pokazywanie nam w oknie konsoli wszelkiego rodzaju komunikatów i innych informacji. Będziemy go używać bardzo często, dlatego musisz koniecznie zaznajomić się ze sposobem wysyłania doń tekstu.

A jest to wbrew pozorom bardzo proste, nawet intuicyjne. Spójrz tylko na omawianą linijkę - nasz komunikat jest otoczony czymś w rodzaju strzałek wskazujących std::cout , czyli właśnie strumień wyjścia. Wpisując je (za pomocą znaku mniejszości), robimy dokładnie to, o co nam chodzi: wysyłamy nasz tekst do strumienia wyjścia.

Drugim elementem, który tam trafia, jest std::endl . Oznacza on ni mniej, ni więcej, jak tylko koniec linijki i przejście do następnej. W przypadku, gdy wyświetlamy tylko jedną linię tekstu nie ma takiej potrzeby, ale przy większej ich liczbie jest to niezbędne.

Występujący przez nazwami cout i endl przedrostek std:: oznacza tzw. przestrzeń nazw . Taka przestrzeń to nic innego, jak zbiór symboli, któremu nadajemy nazwę.
Niniejsze dwa należą do przestrzeni std , gdyż są częścią Biblioteki Standardowej języka C++ (wszystkie jej elementy należą do tej przestrzeni). Możemy uwolnić się od konieczności pisania przedrostka przestrzeni nazw std , jeżeli przed funkcją main() umieścimy deklarację using namespace std; . Wtedy moglibyśmy używać krótszych nazw cout i endl .

Konkludując: strumień wyjścia pozwala nam na wyświetlanie tekstu w konsoli, zaś używamy go poprzez std::cout oraz "strzałki" << .

***

Druga linijka funkcji main() jest bardzo krótka:

getch();

Podobnie krótko powiem więc, że odpowiada ona za oczekiwanie programu na naciśnięcie dowolnego klawisza. Traktując rzecz ściślej, getch() jest funkcją podobnie jak main() , jednakże do związanego z tym faktem zagadnienia przejdziemy nieco później. Na razie zapamiętaj, iż jest to jeden ze sposobów na wstrzymanie działania programu do momentu wciśnięcia przez użytkownika dowolnego klawisza na klawiaturze.

Dołączanie plików nagłówkowych

Pozostały nam jeszcze dwie pierwsze linijki programu:

#include <iostream>
#include <conio.h>

które wcale nie są tak straszne, jak wyglądają na pierwszy rzut oka :)

Przede wszystkim zauważmy, że zaczynają się one od znaku # , czym niewątpliwie różnią się od innych instrukcji języka C++. Są to bowiem specjalne polecenia wykonywane jeszcze przed kompilacją - tak zwane dyrektywy . Przekazują one różne informacje i komendy, pozwalają więc sterować przebiegiem kompilacji programu.

Jedną z tych dyrektyw jest właśnie #include . Jak sama nazwa wskazuje, służy ona do dołączania - przy jej pomocy włączamy do naszego programu pliki nagłówkowe Ale czym one są i dlaczego ich potrzebujemy?

By się o tym przekonać, zapomnijmy na chwilę o programowaniu i wczujmy się w rolę zwykłego użytkownika komputera. Gdy instaluje on nową grę, zazwyczaj musi również zainstalować DirectX, jeżeli jeszcze go nie ma. To całkowicie naturalne, gdyż większość gier korzysta z tej biblioteki, więc wymaga jej do działania. Równie oczywisty jest także fakt, że do używania edytora tekstu czy przeglądarki WWW ów pakiet nie jest potrzebny - te programy po prostu z niego nie korzystają.

Nasz program nie korzysta ani z DirectX, ani nawet ze standardowych funkcji Windows (bo nie jest aplikacją okienkową). Wykorzystuje natomiast konsolę i dlatego potrzebuje odpowiednich mechanizmów do jej obsługi - zapewniają je właśnie pliki nagłówkowe.

Pliki nagłówkowe umożliwiają korzystanie z pewnych funkcji, technik, bibliotek itp. wszystkim programom, które dołączają je do swojego kodu źródłowego.

W naszym przypadku dyrektywa #include ma za zadanie włączenie do kodu plików iostream i conio.h . Pierwszy z nich pozwala nam pisać w oknie konsoli za pomocą std::cout , drugi zaś wywołać funkcję getch() , która czeka na dowolny klawisz.

Nie znaczy to jednak, że każdy plik nagłówkowy odpowiada tylko za jedną instrukcję. Jest wręcz odwrotnie, na przykład wszystkie funkcje systemu Windows (a jest ich kilka tysięcy) wymagają dołączenia tylko jednego pliku!

Konieczność dołączania plików nagłówkowych (zwanych w skrócie nagłówkami) może ci się wydawać celowym utrudnianiem życia programiście. Ma to jednak głęboki sens, gdyż zmniejsza rozmiary programów. Dlaczego kompilator miałby powiększać plik EXE zwykłej aplikacji konsolowej o nazwy (i nie tylko nazwy) wszystkich funkcji Windows czy DirectX, skoro i tak nie będzie ona z nich korzystać? Mechanizm plików nagłówkowych pozwala temu zapobiec i tą drogą korzystnie wpłynąć na objętość programów.

***

Tym zagadnieniem zakończyliśmy omawianie naszego programu - możemy sobie pogratulować :) Nie był on wprawdzie ani wielki, ani szczególnie imponujący, lecz początki zawsze są skromne. Nie spoczywajmy zatem na laurach i kontynuujmy.

1 Takim samym tytułem jest oznaczony gotowy program przykładowy dołączony do kursu

2 Podobny optymizm jest zazwyczaj grubą przesadą i możemy sobie na niego pozwolić tylko w najprostszych programach, takich jak niniejszy :)


Kurs C++
| | | |
Copyright © 2006-2013 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker