background image

1.

 

Funkcja main() 

Oznaczonym początkiem programu C++, który programista musi zdefiniować jest funkcja main(). W 
standardowej postaci funkcja ta może nie przyjmować żadnych lub przyjmować dwa argumenty podawane przez 
system operacyjny przy uruchomieniu programu. Typem zwracanym funkcji main() jest int,np.: 

Int main() 

Int main(int grac, char *argv[]) 

2.

 

Petla for 

Pętla for jest podobna do pętli while, lecz zapewnione są dodatkowe mechanizmy umożliwiające inicjalizację 
pętli oraz wykonanie odpowiednich modyfikacji po każdej iteracji. Na przykład 

#pragma warning(disable:4786) //zapobiega ostrzeżeniom w Visual C++// 

typedef map<int, string> IntStringMap 

IntStringMap m; 

char s[4] 

for (int i=0; i<10; i++) 

s[0]=’a’+i; s[1]=’b’+i 

s[2]=’c’+i; s[3]=’\0’; 

m.insert(IntStringMap::value_type(i, string(s))); 

Instrukcja znajdująca się przed pierwszym średnikiem wykonywana jest w celu inicjalizacji pętli. Przed każda 
interacja, włączenie z pierwsza, wyznaczana jest wartość wyrażenia umieszczonego pomiędzy dwoma 

ś

rednikami. Jeśli wartość wyrażenia równa jest true, wykonane zostaje ciało pętli, w przeciwnym razie pętla 

kończy swoje wykonanie. 

3.

 

Dyrektywy preprocesorowe 

Każda dyrektywa zaczyna się od znaku # jako pierwszego znaku w wierszu, który nie jest znakiem odstępu. 
Pojedyncza dyrektywę można zapisać wielu wierszach, wstawiając lewy ukośnik (\) na końcu wierszy 
pośrednich. 

a)

 

#define – powoduje zastąpienie danego identyfikatora tekstem, który został po nim określony, we 
wszystkich miejscach występowania identyfikatora w pliku źródłowym. 

Jeśli po identyfikatorze nie podamy żadnego tekstu, wówczas preprocesor zdefiniuje ten identyfikator w taki 
sposób, aby każde sprawdzenie istnienia jego definicji dało w wyniku wartość true, a wszystkie wystąpienia 
identyfikatora w kodzie źródłowym zostały zastąpione tekstem pustym (zostały usunięte) 

b)

 

#undef – usuwa definicję identyfikatora tak, aby sprawdzenie jego istnienia dawało w wyniku wartość 
false 

c)

 

#ifdef, #ifndef, #else, # endif – stosowane są łącznie. Dyrektywa #ifdef powoduje dołączenie przez 
preprocesor innego kodu w zależności od istnienia lub braku definicji danego identyfikatora. Użycie 
dyrektywy #else jest opcjonalne. Dyrektywa #ifndef działa podobnie, lecz powoduje dołączenie 
występującego po niej kodu tylko wtedy, gdy brakuje definicji danego identyfikatora. 

d)

 

#if, #elif, #else, #endif – stosowane są łącznie. Powodują one dołączenie lub wykluczenie przez 
preprocesor kodu w zależności od prawdziwości danego wyrażenia. Dyrektywa #elif służy do 
łańcuchowego łączenia szeregu testów. 

e)

 

#include – powoduje dołączenie przez preprocesor innego pliku, zazwyczaj pliku nagłówkowego. 
Nazwy standardowych plików nagłówkowych ujmujemy w nawiasy ostre, a plików nagłówkowych 
zdefiniowanych przez użytkownika w znaki cudzysłowiu. 

f)

 

#error – powoduje przerwanie kompilacji i wyświetlenie określonego  tekstu 

g)

 

#line – dyrektywa, która sprawia, że preprocesor modyfikuje bieżący numer wiersza zapisywany 
wewnętrznie przez kompilator podczas kompilacji w makrodefinicji _LINE_ 

h)

 

#pragma – umożliwia sterowanie operacjami przez podanie dyrektywy wraz z dowolnymi parametrami 
w postaci wymaganej przez tę dyrektywę. 

 

background image

4.

 

Pętla wyboru(instrukcje wyboru) – powodują wykonanie różnych instrukcji lub bloku w zależności 
od wyniku zwróconego przez wyrażenie. Występują dwa typy instrukcji wyboru: 
a) if – oblicza wartość wyrażenia i wykorzystuje wynik do ustalenia, którą z maksymalnie dwóch 
instrukcji lub bloków następnie wykonać. 

 

5. Instrukcja warunkowa - są to instrukcje, które wykonują się tylko wtedy gdy spełniony 
jest podany warunek. Dzięki instrukcjom warunkowych program może "zachowywać" się 
zależnie od spełnienia pewnych warunków. 
 
a) if…else - Podstawowa instrukcja warunkowa wygląda następująco: 
if( <warunek> ) 
 {//blok1 
  ... 
 } 
 else 
  {//blok2 
   ... 
  } 
 
Jeżeli  spełniony  jest  warunek  to  wykonane  zostaną  instrukcje  zawarte  w  bloku  1,  a  gdy  warunek  nie  jest 
spełniony to wykonane zostaną instrukcje z bloku 2. 
 
6. Instrukcja: 
a)  switch  (instrukcja  wyboru)  –  
wybiera  do  wykonania  jeden  z  kilku  bloków  kodu  na  podstawie  wartości 
wyrażenia sterującego, np.: 
switch (type) 

Case keyDown:
 //operacje do wykonania w przypadku naciśnięcia klawisza 
…. 
Break; 
Case keyUp: 
//operacje do wykonania w przypadku zwolnienia klawisza 
…. 
Break; 
…. 
Default: //obsługa tego, nie zostało obsłużone 
…. 

Każdy blok jest oznaczony słowem case, po którym występuje wyrażenie, które podczas kompilacji sprowadzać 
się  musi  do  jednoznacznej  stałej  wartości  całkowitej.  Podczas  wykonywania  sterowanie  przekazywane  jest  do 
bloku o wartości zgodnej z wartością wyrażenia sterującego i do tego miejsca kontynuowane jest wykonywanie 
programu. Na końcu każdego bloku case jest instrukcja break w celu zapobieżenia wykonania kodu związanego 
z  kolejnymi  klauzulami  case.  Opcjonalna  klauzula  default  umożliwia  obsługę  sytuacji,  w  której  wartość 
wyrażenia sterującego nie odpowiada żadnej klauzuli case
 
b) break (instrukcja skoku) – umożliwia opuszczenie najbardziej wewnętrznej pętli lub  
     instrukcji switch 
c) continue (instrukcja skoku) – powoduje przekazanie sterowania na początek najbardziej  

wewnętrznej pętli 

d) Goto (instrukcja skoku) – powoduje przekazanie sterowania do określonej etykiety 
 
7. Funkcja – funkcje w c++ mogą pobierać pewne argumenty i zwracać określony typ wartości. 
 
Funkcję deklarujemy w następujący sposób: 
 
<typ_zwracanej_wartości> nazwa_funkcji( <argumenty_funkcji> ); 
 
 
a) deklaracje funkcji – składają się z następujących elementów: typu zwracanego, nazwy oraz ujętej w nawiasy 
zwykłe listy parametrów rozdzielonych przecinkami lub, w przypadku braku parametrów, pustej pary nawiasów 
zwykłych. Nazwy parametrów nie są wymagane, lecz stanowią dobrą dokumentacje kodu. 
b) odwołania się do funkcji -  
c) funkcja rekrutacyjna –  

background image

 
8. Deklaracje 
a) Deklaracje stałych –  
b)  deklaracje  zmiennych  –  
deklaracje  dotyczące  zmiennych  wprowadzają  nazwy  odnoszące  się  do  danych. 
Zawierają  one:  opcjonalną  klasę  pamięci,  opcjonalne  kwalifikatory,  typy  oraz  listę  jednej  lub  kilku 
deklarowanych nazw rozdzielonych przecinkami, np.: 
int i,j,k; 
char buffer[80]; 
deklaracje zmiennych mogą wystąpić w dowolnym miejscu wewnątrz bloku, nie tylko na początku. 

 

Typy zmiennych: 

int  

liczba całkowita (dodatnia lub ujemna)  

float  

liczba rzeczywista (z częścią ułamkową)  

bool  

wartość logiczna (prawda lub fałsz)  

char  

pojedynczy znak  

std::string  

łańcuch znaków (tekst)  

 

 
9. Tablice – zawierają określoną liczbę elementów danego typu. Aby podczas kompilacji programu kompilator 
mógł  zarezerwować  wymagana  ilość  pamięci,  w  definicji  tablicy  trzeba  określić  typ  oraz  liczbę  elementów, 
które będzie on zawierać. Kompilator musi mieć możliwość ustalenia tej wartości podczas kompilacji programu. 
Tablice wielowymiarowe – są to tablice zdefiniowane przy użyciu więcej niż jednego indeksu. 
 
10. Instrukcje wejścia/wyjścia 
 
11.  Wskaźniki  –  
deklaruje  się  je  przez  umieszczenie  w  deklaracji  przed  nazwą  zmiennej  znaku  gwiazdki  (*), 
np.: 
Int 1=20; 
Int *itr=&i; 
Zmienna i jest typu int, natomiast *iptr jest wskaźnikiem do zmiennej. 

a)

 

Wskaźniki typu void – mogą wskazywać dane dowolnego typu. 

b)

 

Wskaźniki  puste  –  można  im  przypisać  wartość  0.  Na  tym  wskaźniku  nigdy  nie  wolno  wykonywać 

definicji. 

c)

 

Wskaźniki  funkcji  –  wskazuje  funkcje.  Jego  typ  jest  związany  z  sygnaturą  wskazywanej  przez  niego 

funkcji. 
 

12.  Klasy  –  są  typami  grupującymi  dane  i  funkcje  w  zhermetyzowane,  spójne  jednostki.  Definiuje  się  je, 
deklarując dla nich zestaw danych i funkcji składowych 
 
13. Konstruktor i destruktor 
a)  konstruktor
    są  specjalnymi  funkcjami  składowymi  służącymi  do  inicjalizacji  egzemplarzy  klasy. 
Umożliwiają one przeprowadzenie inicjalizacji zanim obiekt zostanie w ogóle użyty. Konstruktory wywoływane 
są  przy  każdej  alokacji  pamięci  dla  obiektu,  automatycznie  przez  kompilator,  czy  tez  na  skutek    zastosowania 
operatorów new lub new[]. Konstruktory posiadają taką samą nazwę, co klasa i nigdy nie zwracają wartości. 

 

Konstruktory domyślne 

 

Konstruktory kopiujące 

 

Konstruktory jawne 

background image

b) destruktor – są specjalnymi funkcjami składowymi wywoływanymi w momencie, gdy egzemplarz klasy ma 
właśnie  zostać  zniszczony.  Umożliwiają  one  przeprowadzenia  czyszczenia  zanim  obiekt  przestanie  istnieć. 
Destruktory wywoływane są bezpośrednio przed opuszczeniem zakresu przez obiekt oraz w przypadku jawnego 
niszczenia obiektów za pośrednictwem wskaźnika do nich przy użyciu operatora delete lub delete[]. Destruktory 
posiadają taka samą nazwę, co klasa, lecz poprzedzoną znakiem tyldy (~). Nie przyjmują żadnych argumentów i 
nie zwracają wartości. 
 
 
 
14.Słowa kluczowe, komentarze, operatory 
a) słowa kluczowe - 
Słowa kluczowe to słowa które mają zastrzeżoną nazwę oraz specjalne znaczenie w danym 
języku programowania. 
 
Wykaz słów kluczowych języka c++ wraz z krótkim opisem: 
 
asm 

Wstawianie kodu w asemblerze 

auto 

Klasa zmiennej lokalnej 

bool 

Typ zmiennej 

break  Przerywa wykonywanie pętli (for, while) oraz instr. switch 
case 

Wskazuje na warunek insturkcji switch 

catch 

Wyłapuje wyjątek 

char 

Typ zmiennej 

class 

Deklaracje klas 

const 

Klasa zmiennych, deklaracja stałych funkcji 

continue 

Wykonanie kolejnej iteracji pętli 

default  Wskazuje na dowolny warunek insturkcji switch 
delete  Zwalnianie pamięci przydzielonej dynamicznie 
do 

Tworzenie pętli do-while 

double  Typ zmiennej 
else 

Alternatywa dla instr. if, gdy warunek nie jest spełniony 

enum 

Typ zmiennej 

extern  Klasa zmiennej 
float 

Typ zmiennej 

for 

Pętla 

friend  Wskazuje zaprzyjaźnioną klasę lub funkcję 
goto 

Skok bezwarunkowy 

if 

Instrukcja warunkowa 

inline 

Wstawia kod funkcji w miejscu jej wywołania 

int 

Typ zmiennej 

long 

Kwalifikator zmiennej 

namespace 

Przestrzeń nazw 

new 

Przydziela pamięć dynamicznie 

operator 

Przeciążanie operatorów 

private  Stopień ochrony danych w klasie 
protected 

Stopień ochrony danych w klasie 

public  Stopień ochrony danych w klasie 
register Klasa zmiennej 
return  Zwracanie wartości przez funkcje 
short 

Kwalifikator zmiennej 

signed  Kwalifikator zmiennej 
sizeof 

Zwraca rozmiar obiektu (typu) w bajtach 

static 

Klasa zmiennej, funkcje statyczne 

struct  Deklaracja struktur 
switch  Rodzaj instrukcji warunkowej 
template 

Tworzenie wzorców 

this 

Wskaźnik dla klas 

throw  Rzucanie wyjątkiem 
try 

Przechwytywanie wyjątków 

typedef  Tworzenia nowego typu danych 
union  Deklaracja do definiowania unii 
unsigned 

Kwalifikator zmiennej 

using 

Wybór przestrzeni nazw 

background image

virtual  Deklarowanie metod wirtualnych klasy 
void 

Typ zmiennej 

volatile  Klasa zmiennej 
wchar_t Typ zmiennej 
while 

Rodzaj pętli 

 
b) komentarze 
c)  operatory  –  
służy  do  wykonania  określonej  operacji  na  zbiorze  operandów  występujących  w  wyrażeniu.. 
Operatory  w  języku  C++  ,  w  zależności  od  operatora,  wykonują  działania  na  jednym,  dwóch  lub  trzech 
operandach.  Mogą  one  być  łączone  lewostronnie  lub  prawostronnie.  Operatory  przypisania(=,+=,<<=,  itd.)  na 
przykład SA łączne prawostronnie,a zatem wyrażenie: i=j=k określa faktycznie operację: i=(j=k) 
z  drugiej  strony  operator  przypisania  (+)  jest  lewostronnie  łączny,  a  więc  wyrażenie:  i+j+k  określa  faktycznie 
operację: (i+j)+k 
 
 
 

Operator 

Opis 

Łączność 

:: 

Rozróżnianie zakresu 

Brak 

[] 

Indeks tablicy 

Lewostronna 

Wybór składowej 

Lewostronna 

-> 

Wybór składowej 

Lewostronna 

( ) 

Wywołanie funkcji 

Lewostronna 

( ) 

Konstrukcja wartości 

Brak 

++ 

Inkremenatcja przyrostkowa 

Brak 

-- 

Dekrementacja przyrostkowa 

Brak 

Typeid 

Informacja o typie 

Brak 

*_cast 

Rzutowanie w stylu języka C++ 

Brak 

Sizeof 

Inf. o rozmiarze 

Brak 

++ 

Inkrementacja przedrostkowa 

Brak 

-- 

Dekrementacja przedrostkowa 

Brak 

Negacja bitowa (NOT) 

Brak 

Negacja logiczna (NOT) 

Brak 

Jednoargumentowy znak minusa 

Brak 

Jednoargumentowy znak plusa 

Brak 

Pobranie adresu 

Brak 

Adresowanie pośrednie 

Brak 

New 

Przydział pamięci 

Brak 

New[] 

Przydział pamięci 

Brak 

Delete 

Zwolnienie pamięci 

Brak 

Delete[] 

Zwolnienie pamięci 

Brak 

( ) 

Rzutowanie w stylu języka C++ 

Prawostronna 

.* 

Wy bór wskaźnika do składowej 

Lewostronna 

->* 

Wy bór wskaźnika do składowej 

Lewostronna 

Mnożenie 

Lewostronna 

Dzielenie 

Lewostronna 

Reszta z dzielenia 

Lewostronna 

Dodawanie 

Lewostronna 

Odejmowanie 

Lewostronna 

<< 

Przesunięcie bitowe w lewo 

Lewostronna 

>> 

Przesunięcie bitowe w prawo 

Lewostronna 

Mniejsze niż 

Lewostronna 

<= 

Mniejsze lub równe 

Lewostronna 

Większe niż 

Lewostronna 

>= 

Większe lub równe 

Lewostronna 

== 

Równe 

Lewostronna 

!= 

Różne 

Lewostronna 

Koniunkcja bitowa (AND) 

Lewostronna 

Różnica symetryczna (XOR) 

Lewostronna 

Alternatywa bitowa (OR) 

Lewostronna 

&& 

Iloczyn logiczny (AND) 

Lewostronna 

background image

|| 

Suma logiczna (OR) 

Lewostronna 

?: 

Wyrażenie warunkowe 

Prawostronna 

Przypisanie proste 

Prawostronna 

*= 

Przypisanie wyniku mnożenia 

Prawostronna 

/= 

Przypisanie wyniku dzielenia 

Prawostronna 

%= 

Przypisanie reszty z dzielenia 

Prawostronna 

+= 

Przypisanie wyniku dodawania 

Prawostronna 

-= 

Przypisanie wyniku odejmowania 

Prawostronna 

<<= 

Przypisanie wyniku przesunięcia w lewo 

Prawostronna 

>>= 

Przypisanie wyniku przesunięcia w prawo 

Prawostronna 

&= 

Przypisanie wyniku bitowego AND 

Prawostronna 

^= 

Przypisanie wyniku bitowego XOR 

Prawostronna 

|= 

Przypisanie wyniku bitowego OR 

Prawostronna 

Throw 

Zgłoszenie wyjątku 

Prawostronna 

Sekwencja 

Lewostronna 

 
15. Struktura programu 
Na  najwyższym  poziomie  program  w  języku  C++  składa  się  z  jednego  lub  wielu  plików  źródłowych 
zawierających  kod  źródłowy  C++.  We  wszystkich  tych  plikach  łącznie  zdefiniowane  jest  dokładnie  jedno 
miejsce rozpoczęcia wykonania programu i być może wiele miejsc jego zakończenia. 
W plikach źródłowych C++ często importowany jest, czyli dołączany, dodatkowy kod źródłowy znajdujący się 
w tzw. plikach nagłówkowych. Za dołączenie kodu z tych plików przed kompilacją każdego pliku źródłowego 
odpowiedzialny  jest  preprocesor  języka  C++.  Jednocześnie  preprocesor,  poprzez  zastosowanie  tzw.  dyrektyw 
preprocesora, może wykonać także inne operacje. Plik źródłowy po przetworzeniu przez preprocesor zwany jest 
jednostką translacji. 
 
16. Algorytm - opis rozwiązywania problemu (zadania) wyrażony za pomocą takich operacji, które wykonawca 
algorytmu rozumie i potrafi wykonać. 
Jako przykład posłuży algorytm wyznaczania wartości całkowitej pierwiastka kwadratowego z danej liczby 
naturalnej n, czyli algorytmicznego obliczania wartości funkcji (sqrt(n)), gdzie n jest liczbą naturalną. Algorytm 
ten jest oparty na bardzo prostym pomyśle. Bierzemy liczbę naturalną i, a następnie sprawdzamy czy (i+1)²>n; 
Jeśli warunek ten nie jest spełniony, to bierzemy kolejną liczbę naturalną i dla niej sprawdzamy warunek. Jeżeli 
warunek jest spełniony, to i jest szukaną wartością funkcji E(sqrt(n)). Przyjmuje się, że wykonawca tego 
algorytmu potrafi dodawać, podnosić do kwadratu i porównywać  dwie liczby naturalne.