kurs_jezyka_c.doc

(154 KB) Pobierz
Kurs języka C++

Kurs języka C++


Wersja 1.00 (10.03.2004)


Prawa autorskie

Ponieważ uważam za bezsens płacenie za książkę typu "C++ dla opornych" gdzie najbardziej opornym jest autor, przeszukałem net, odgrzebałem dyskietki ze studiów i zabrałem się do pracy. Opracowując ten kurs, korzystałem z innych kursów (które pewnie korzystały z innych kursów, ponieważ wiele rzeczy się w nich powtarza, a nikt o tym nie wspomina - przedstawiając każdy kurs jako swoje dzieło), z książek, materiałów z okresu studiów, zatem wykorzystuj ten kurs jak Ci się podoba. Jeśli uda Ci się na tym zarobić - chwała Ci, że Ci się to udało - kup mi Ferrari - będziemy kwita.


Kurs ten opracowałem w celach edukacyjnych i nie odnoszę żadnych korzyści materialnych.Nie biorę odpowiedzialności za wszelkie szkody powstałe w wyniku stosowania tego kursu. Wszystko robisz na własną odpowiedzialność, jak napiszesz programik który sformatuje (albo co gorsza zamaże) Ci dysk - TWOJA sprawa.


Wszelkie informacje i uwagi dotyczące kursu (zwłaszcza dotyczące błędów, literówek czy błędów ortograficznych) są dla mnie bezcenne i proszę przesyłać e-mailem jeśli łaska.


Przygodę z programowaniem rozpoczynałem od języka BASIC na maszynie Commodore 64, potem czas przyszedł na Fortran, Pascal-Delphi, C/C++, a obecnie przesiadłem się na GNU/GPL Linux i poznaje Perla i Javę. W sumie nie ma znaczenie jaki znasz język (no, może BASIC był wyjątkowy) - kwestia budowania algorytmów jest najważniejsza, implementacja to tylko zapis pomysłu.


Język C/C++jest językiem systemów operacyjnych i aplikacji użytkowych. Został zaprojektowany przez Dennisa Ritchiego około roku 1972 i od tamtej pory jest rozwijany. Praktycznie wszystkie nowoczesne systemy operacyjne pisane są w C++ (jak Linux, czy monopolista) ponieważ jest szybki i zajmuje mało miejsca w pamięci. Jest to niewątpliwie trudniejszy język od Pascala, ponieważ Pascal jest językiem opisowym, a C/C++ to język w którym roi się od symboli. Z tego powodu oraz z powodu swojej budowy język C++ nie jest dobrym rozwiązaniem dla początkujących programistów.

 

 

 


Podstawowymi pojęciami podczas programowania w języku C++ są:

·         kompilator - narzędzie (program) tłumaczące napisany przez nas kod źródłowy programu (zrozumiały dla nas) na język maszynowy (czyli zrozumiały dla komputera)

·         środowisko - czyli kompilator i wspierające do aplikacje (programy)

·         plik nagłówkowy - plik zawierający definicję używanych słów kluczowych oraz funkcji (tzw.:biblioteka statyczna)

·         słowo kluczowe - zastrzeżone słowo, które jest rozumiane przez kompilator

·         funkcja - podprogram - część kodu do wielokrotnego wykorzystania (nie dotyczy funkcji main)


struktura programu


 

#include <nazwa_pliku_nagłówkowego1.h>       /* dołączone pliki nagłówkowe*/ 

#include "nazwa_pliku_nagłówkowego2.h";      /* blok dyrektyw */

 

int nazwa_funkcji(parametry)                 /* blok funkcji */

  {

     kod funkcji

  }

 

main()                                        /* blok programu głównego

                                               - funkcji głównej */

       {

                    instrukcje programu

       }

Polecenie #include powiadamia kompilator, by dołączył plik nagłówkowy, którego nazwę podajemy w nawiasie - jeżeli jest to biblioteka programu, oraz w cudzysłowach - jeśli jest to nasza własna biblioteka(możemy podać do niej ścieżkę dostępu). Instrukcje programu objęte są nawiasami {}. Linijkę kodu zwykle kończymy średnikiem - istnieją od tej reguły wyjątki.


Wcięcia i komentarze


Pisząc program pamiętać należy o stosowaniu wcięć, oraz o stosowaniu komentarzy. Właściwie to każdy blok kodu powinien być opisany - do czego służy, a szczególnie zawiłe linie kodu warto by były opisane linia po linii.

Kompilator ignoruje znaki pozostawione w jednej linii po postawieniu // komentarz, a jeśli chcemy wykonać dłuższy komentarz, to stosujemy ramy /* komentarz */ które mogą zawierać więcej niż jedną linię.


Nazwy programów (kodu programu)


Wszystkie pliki zawierające teksty programów w języku C++ powinny ˙mieć charakterystyczne rozszerzenie nazwa.cpp (CPP to skrót od C Plus Plus) lub nazwa.c (dla języka C). Po tym rozszerzeniu rozpoznaje te programy kompilator.


Preprocesor


Preprocesor jest programem uruchamianym przed kompilatorem. Odpowiedzialny jest on za przetwarzanie dyrektyw, czyli słów poprzedzonych znakiem#, które odpowiedzialne są min. za obsługę plików nagłówkowych (postaci nazwa_pliku_nagłówkowego.h), które dołączane są do kodu źródłowego - w których znajdują się definicje klas oraz funkcji.


dyrektywy


#include <nazwa_pliku.h> lub #include "nazwa_pliku.h"
Dyrektywa dołączająca podany plik nagłówkowy do kodu programu. Jeżeli nazwa pliku jest ujęta w nawiasy trójkątne, to preprocesor wie, że danego pliku należy szukać w standardowym katalogu kompilatora. Jeżeli natomiast plik zawarty jest w cudzysłów, to preprocesor szuka, go w katalogu, gdzie tworzony jest projekt.

#define nazwa_zmiennej wartość_zmiennej
Dyrektywa służąca do definiowania zmiennych globalnych. Zmienna nie musi mieć przypisanej wartości.

#ifdef nazwa_zmiennej
Dyrektywa warunkowa, sprawdzająca czy jest zdefiniowana zmienna o określonej nazwie. Jeżeli tak to wykonuje kod aż do wystąpienia dyrektywy #endif. Służy ona do sprawdzania dla jakiego systemu jest program kompilowany, oraz dla zabezpieczenia przed podwójnym zadeklarowaniem klas, zmiennych, funkcji

#ifndef
Dyrektywa ta działa podobnie do poprzedniej, z tym wyjątkiem, że ta wykonuje część kodu, w momencie nie spełnienia warunku.

#endif
Dyrektywa ta kończy działanie obu powyższych dyrektyw warunkowych.

#else
Dyrektywa występująca w parze z dyrektywami warunkowymi. Wykonuje ona jakiś kod w momencie niespełnienia jakiegoś warunku.

 

 

 

 

 

 

 

 

Operatory


Operatory według pierwszeństwa

Operator

Operacja

::
::

zasięg globalny (jednoargumentowy)
zasięg klasy (dwuargumentowy)

->
.
[]
()
()

selektory składowych

index tablicy
wywołanie funkcji
konstrukcja typu

sizeof
++
--
~
!
+
-
*
&
()
new
delete

rozmiar
zwiększenie
zmniejszenie
negacja bitowa
negacja logiczna
plus
minus
wyłuskanie
adres
przekształcenie typu
zarządzanie pamięcią
przydzielaną dynamicznie

->*
.*

wskaźnikowe selektory składowych

*
/
%

mnożenie
dzielenie
dzielenie modulo

+
-

dodawanie
odejmowanie

<<
>>

przesuwanie bitów w lewo
w prawo>

<
<=
>
>=

mniejsze
mniejsze lub równe
większe
większe lub równe

==
!=

równość
nierówność

&

koniunkcja bitowa

^

różnica symetryczna

|

alternatywa bitowa

&&

iloczyn logiczny

||

suma logiczna

?:

if arytmetyczne

=
*=
/=
%
+=
-=
<<=
>>=
&=
|=
^=

Przypisz
Pomnóż przez wartość
Podziel przez wartość
Umieść resztę z dzielenia przez wartość
Dodaj
Odejmij
Przesuń o ... bitów w lewo
Przesuń o ... bitów w prawo
Logiczne AND
Logiczne OR
Negacja

,

przecinek



 


Operatory arytmetyczne


Dodawanie +
Operator sumuje dwie zmienne. Przykład składni: 2+2

Odejmowanie -
Operator odejmuje jedną zmienną od drugiej. Przykład składni: 5-2

Mnożenie *
Operator mnoży przez siebie dwie liczby. Przykład składni: 3*5

Dzielenie /
Operator dzieli przez siebie dwie liczby. Jeśli dzielnik jest zerem, program przerwie działanie z komunikatem błędu dzielenia przez 0. Przykład składni 8/4.

Dzielenie modulo %
Dzielenie modulo zwraca resztę z dzielenia, czyli podczas dzielenia liczby całkowitej przez liczbę całkowitą zwraca liczbę całkowitą, będącą resztą z dzielenia. Przykład działania: 6%2=0; 7%2=1.


Operatory bitowe


Operatory bitowe działają na poszczególnych bitach zmiennych

Przesuwanie bitów w lewo <<
Na zmiennych typu unsigned char, jeżeli zmienna ma wartość przedstawioną w postaci binarnej, przykładowo: 00100100, to wynikiem takiej operacji zmienna << 2 będzie wynik: 10010000. Polecenie przesuwa bity w lewo o dwie pozycje, argument traci bity które w wyniku przesunięcia znajdą się poza nim, po prawej stronie na miejsce brakujących bitów wstawia zera. Składnia: zmienna << liczba bitów

Przesuwanie bitów w prawo >>
j.w. wykonywane w prawo.

Negacja bitowa ~
Negacja bitowa zamienia w zmiennej wszystkie zera na jedynki i jedynki na zera. Przykład: ~10011010=01100101, składnia:~zmienna

Koniunkcja bitowa &
Koniunkcja bitowa jest to mnożenie pojedynczych bitów. Koniunkcja daje wynik jeden gdy oba bity mają wartość jeden. Działa on na argumentach całkowitych, składnia: zmienna1 & zmienna2

Różnica symetryczna ^
Wynikiem różnicy symetrycznej jest na danej pozycji jedynka gdy bity są różnej wartości. Działa na argumentach całkowitych, składnia: zmienna1 ^ zmienna2

Alternatywa bitowa |
Wynikiem alternatywy bitowej jest na danej pozycji jedynka gdy przynajmniej jeden bit jest jedynką. Działa na argumentach całkowitych, składnia: zmienna1 | zmienna2


Operatory porównania, operatory logiczne


Operatory dające w wyniku wartość logiczną TRUE, FALSE czyli PRAWDA, FAŁSZ, gdzie warunek prawdziwy daje wartość 1 natomiast fałszywy 0.

Negacja logiczna !
Negacja logiczna zamienia prawdę w fałsz, a fałsz w prawdę. Np. jeżeli wyrażenie: a==b jest prawdziwe i do niego zastosujemy wyrażenie !(a==b) to w wyniku otrzymamy fałsz. Składnia: !argument

Iloczyn logiczny &&
Wynikiem iloczynu logicznego jest prawda tylko wtedy gdy oba argumenty też są prawdziwe. Składnia: argument1 && argument2

Suma (alternatywa) logiczna ||
Wynikiem sumy logicznej jest prawda wtedy jeżeli przynajmniej jeden argument jest prawdziwy. Składnia: argument1 || argument2

Równość ==
Wynikiem jest prawda w tedy gdy wartości obu argumentów są takie same. Składnia: argument1 == argument2

Nierówność !=
Wynikiem jest prawda w tedy gdy wartości obu argumentów są różne. Składnia: argument1 != argument2

Operatory relacji
Wynikiem jest prawda w tedy gdy jest spełniony warunek że coś jest większe, mniejsze, lub równe od siebie. Zależy on od operatora. Składnia:
argument1 < argument2
argument1 <= argument2
argument1 > argument2
argument1 >= argument2


...

Zgłoś jeśli naruszono regulamin