PO W1 2 II ZIN


UCZELNIA WARSZAWSKA
Programowanie obiektowe
r.a. 2007/2008
ProwadzÄ…cy: dr hab. in\. Kazimierz Worwa, prof. WAT
e-mail: kworwa@wat.edu.pl
Programowanie obiektowe
RAZEM Wykłady Ćwiczenia Laboratoria
32 16x - 16+
Programowanie obiektowe
2
Programowanie obiektowe
Warunki zaliczenia przedmiotu (dwa wpisy):
zaliczenie laboratorium
egzamin (test wielokrotnego wyboru)
Programowanie obiektowe
3
LITERATURA
1. Stroustrup B.: Język C++. WNT, Warszawa,2006.
2. Schildt H.: Programowanie: C++. Wydawnictwo RM, Warszawa,
2002.
3. Graham I.: Metody obiektowe w teorii i w praktyce. WNT,
Warszawa, 2004.
4. Wrycza S., Marcinkowski B., Wyrzykowski K.: Język UML 2.0
w modelowaniu systemów informatycznych. Wydawnictwo Helion,
Gliwice, 2005.
Programowanie obiektowe
4
Lokalizacja plików do wykładów
http://members.lycos.co.uk/pkjw84/kw/
w folderze: Programowanie obiektowe II ZIN
logowanie:
nazwa u\ytkownika 2007/2008
hasło kw
Programowanie obiektowe
5
Programowanie obiektowe
Tematyka przedmiotu
1. Wprowadzenie do języka C++
2. Wprowadzenie do klas obiektów
3. Konstruktory i destruktory
4. Dziedziczenie
5. Funkcje wirtualne i polimorfizm
6. Szablony funkcji i klas
7. Obsługa wyjątków
8. Funkcje przeciÄ…\one
9. Przecią\anie operatorów
10. Biblioteka standardowych szablonów (STL)
Wykład 1-2
Wprowadzenie do języka C++
Struktura programu
Podstawowe typy danych
Stałe i zmienne
Operatory arytmetyczne i logiczne
Instrukcje sterujÄ…ce
Instrukcje alokacji i dealokacji pamięci
Programowanie obiektowe
7
Jaki dokładnie jest język C ?
Jego kod jest niezwykle szybki, ale składnia języka mo\e
przysparzać wielu kłopotów niewprawnym programistom,
C ma ugruntowaną pozycję na rynku  przetrwał próbę czasu,
czego nie mo\na powiedzieć o wielu innych językach
programowania,
UNIX został prawie w 100% zaimplementowany w języku C
i cały czas jest podstawowym językiem programowania dla
systemów operacyjnych z grupy systemów UNIX, np. Solaris,
AIX, Linux, jest on równie\ wa\ny dla systemu DEC VMS,
C jest równie\ bardzo wa\nym językiem programowania dla
systemów z rodziny Windows i systemów sieciowych z rodziny
NetWare
Programowanie obiektowe
8
Jaki dokładnie jest język C ?
C jest językiem tzw. średniego poziomu:
Niski poziom  języki maszynowe,
assemblery
wydajność kodu
wynikowego C
zbli\ona do wydajności
języka maszynowego
Średni poziom  język C
składnia kodu
zródłowego C
zbli\ona do składni
Wysoki poziom  języki pochodzące
języka wysokiego poziomu
od Algola: Pascal, Modula2, ADA, Basic,
jak równie\ C++, Java
Programowanie obiektowe
9
Jakie jest odniesienie języka C do języków C++ i Java
Język C++ jest obiektowo zorientowanym rozszerzeniem
języka C
Język Java został zbudowany bezpośrednio na podstawie
języka C++
Wobec powy\szego: aby dobrze poruszać się w obszarze
języków C++ i Java wskazana jest znajomość języka C
Aby nazywać siebie profesjonalistą, nale\y znać język C
Programowanie obiektowe
10
Język programowania C++
Dlaczego język C++?
C++ jest językiem hybrydowym: umo\liwia programowanie, będące
wynikiem stosowania w jednym programie ró\nych technik
programowania;
C++ jest językiem elastycznym; umo\liwia pisanie programów ka\dą,
z wcześniej omówionych, technik programowania (główna przyczyna
jego popularności).
C++ jest językiem wydajnym; semantyka języka znajduje się na
niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlają
podstawowe pojęcia tradycyjnego komputera.
C++ jest językiem szeroko dostępnym; implementacje tego języka
istnieją zarówno dla mikrokomputerów jak te\ dla du\ych maszyn
(superkomputerów).
C++ jest językiem przenośnym; programów napisanych w C++
zazwyczaj nie mo\na automatycznie przenosić z jednego systemu
operacyjnego do drugiego; jednak przenośność z uwzględnieniem
odpowiednich uwarunkowań jest mo\liwa.
Programowanie obiektowe
11
Język programowania C++
Charakterystyczny błąd: programiści u\ywają C++ jako  lepszego C ,
nie wykorzystując w istocie \adnych jego mo\liwości obiektowych;
Część specjalistów wró\y szybki koniec kariery języka C++, m.in. w
związku z pojawieniem się bardziej przyjaznych języków wy\szego
poziomu (takich jak Java lub środowisk programowania wizualnego);
Programowanie obiektowe
12
Historia języka C/C++
1978r.  pierwszy opis standardu języka C  Dennis Ritchie i
Brian Kernighan w ksiÄ…\ce pt.  The C Programming Language
wyd. Prentice-Hall (polskie wydanie w 1988r. pt.  Język C
wydawnictwo WNT)
1989r.  standard ANSI języka C
1983  oddanie do u\ytku pierwszej implementacji języka C++
(Bjarne Stroustrup). Powstanie nazwy C++
1985  powstanie pierwszej wersji języka C++ do u\ytku
zewnętrznego
1994  przyjęcie standardu ANSI/ISO języka C++
Programowanie obiektowe
13
Kształt programu w języku C/C++
Podstawą programu jest tzw. MODUA GAÓWNY, który jest
zapisywany w postaci kodu zródłowego zapisanego w pliku
ASCII z rozszerzeniem .C lub .CPP
Struktura modułu głównego w języku C/C++:
.. /* klauzule importu bibliotek */
część
.. /* deklaracje stałych, zmiennych, typów */
deklaracyjna
.. /* prototypy lub deklaracje funkcji lub procedur */
..
main( ) /* słowo domyślne i zastrze\one */
część
{ /* klamra otwierajÄ…ca program*/
wykonywalna
.. /* polecenia wykonywane przez program */
..
} /* klamra zamykajÄ…ca program*/
Programowanie obiektowe
14
Wprowadzenie do języka C++
Pierwszy program
// Pierwszy program w C++
#include
using namespace std;
// main rozpoczyna wykonanie siÄ™ programu
int main()
{
cout << "Witaj C++!\n";
getchar();
return 0; // program zakończony poprawnie
} // koniec bloku main
Program 1.1
Programowanie obiektowe
15
Podział programu na procedury i funkcje
w językach programowania mamy do czynienia z dwoma
rodzajami podprogramów:
funkcje wykonujące czynności i zwracające wartość
procedury wykonujące jakieś czynności
deklaracje procedur i funkcji są umieszczane w części
deklaracyjnej modułu
w części wykonywalnej programu zdefiniowane procedury i funkcje
są wywoływane
wykorzystując procedury i funkcje w tekście programu realizujemy
tzw. programowanie proceduralne, którego najwy\szą formą jest
programowanie strukturalne, wykorzystujÄ…ce technikÄ™
dekompozycji ( dziel i rzÄ…dz )
Programowanie obiektowe
16
Podział programu na moduły
Program mo\e być zbudowany z wielu modułów, np.:
biblioteki standardowe biblioteki własne
, ......,  moja_bib1.h , ...,  moja_bib2.h
import
moduł główny
z funkcjÄ… main( )
kompilator, linker
program wykonywalny
Programowanie obiektowe
17
Deklarowanie procedur i funkcji
Funkcje w języku C/C++ deklarujemy według schematu:
zwracany_typ nazwa_funkcji (typ1 zmienna1,..., typn zmiennan);
funkcja zwraca wartość,
Parametry formalne funkcji (procedury).
obliczonÄ… w czasie jej
W czasie wywołania funkcji (procedury)
wykonania
w ich miejsce wstawiane sÄ… parametry
aktualne, które przekazują wartości do
podprogramu, na których on operuje
Procedury w języku C/C++:
void nazwa_procedury (typ1 zmienna1,..., typn zmiennan);
procedura nie zwraca wartości,
co oznaczamy słowem void
Programowanie obiektowe
18
Deklarowanie procedur i funkcji
/* deklaracje importu bibliotek*/
.......................
/*deklaracje procedur i funkcji, np.:*/
int moja_fun1(int par1); /*funkcja z jednym parametrem*/
{
/*treść funkcji*/
return wartość /*wymagana deklaracja zwrotu wartości funkcji*/
}
void moja_proc1(void); /*procedura bezparametrowa*/
{
/*treść procedury*/
}
/* moduł główny */
main( )
{
/*treść programu*/
zmienna = moja_fun1(21); /*przykład wywołania funkcji*/
moja_proc1( ); /*przykład wywołania procedury*/
return 0;
}
Programowanie obiektowe
19
Komentarze
Komentarz jest fragmentem programu ignorowanym w procesie kompilacji
Wyró\nia się komentarze blokowe i liniowe
Komentarz blokowy umieszcza się między sekwencją znaków "/*" a "*/",
a komentarz liniowy rozpoczyna się sekwencją "//" a kończy znakiem
końca linii.
Przykłady
/* To jest komentarz blokowy. Mo\e zajmować kilka wierszy */
// To jest komentarz liniowy
Uwaga na nierozwa\ne umieszczenie w zakresie komentarza
linii kodu zródłowego, np.
int a; /*Komentarz w stylu
int b; języka C */
Programowanie obiektowe
20
Identyfikatory
Identyfikator (nazwa) słu\y do nazywania obiektów wchodzących w skład programu
napisanego w języku C (zmiennych, typów, funkcji itp).
Przykładowe identyfikatory:
i, liczba, j1, J1, data_urodzenia, _koniec
Przykłady niepoprawnych identyfikatorów:
2rok, 1_kwietnia, ab$, czary!mar, a-b
Nie nale\y u\ywać identyfikatorów mających dwa znaki podkreślenie obok siebie (są
one poprawne z punktu widzenia składni języka C), poniewa\ mogą być one
u\ywane przez twórców kompilatora do tworzenia bibliotek, makr itp.
Programowanie obiektowe
21
Stałe i zmienne w programie
stałe nie zmieniają swojej wartości w czasie działania programu
zmienne mogą zmieniać swoją wartość dowolnie wiele razy
je\eli chodzi o zakres widoczności mo\emy wyró\nić w programie
dwa rodzaje stałych i zmiennych:
zmienne i stałe globalne
deklarowane w części deklaracyjnej modułu, widoczne w
całym programie, a więc we wszystkich jego procedurach,
funkcjach i funkcji main( )
zmienne i stałe lokalne
deklarowane wewnątrz procedur, funkcji i widoczne wyłącznie
w tych procedurach, funkcjach, w których zostały one
zadeklarowane
ka\da stała lub zmienna musi mieć określony typ danych
na obecnym etapie wykładu będziemy wykorzystywać wyłącznie
predefiniowane typy danych
Programowanie obiektowe
22
SÅ‚owa kluczowe
Niektóre identyfikatory zostały zastrze\one przez twórców języka. Słu\ą one do
zapisu konstrukcji jakie są dopuszczalne w języku C. Dlatego nazywa się je słowami
kluczowymi. Słowa kluczowe nie mogą być u\yte jako nazwy zmiennych, typów lub
funkcji i nie są poprawnymi identyfikatorami w sensie składni języka C. W języku
ANSI C występują następujące słowa kluczowe:
auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
Programowanie obiektowe
23
Deklarowanie stałych
stałe literalne (literal constant):
nazwa_stałej = wartość, np.:
dzień = 24;
godzina = 60;
PI = 3.1416;
stałe symboliczne (symbolic constant):
#define nazwa_stałej wartość, np.:
#define dzień 24
#define godzina 60
# define PI 3.1416
const typ_stałej nazwa_stałej wartość_stałej, np.:
const int dzień 24;
const int godzina 60;
const float PI 3.1416;
Programowanie obiektowe
24
Zmienne
Zmienną określany jest pewien obszar w pamięci komputera,
w którym mogą być przechowywane dane. Z punktu widzenia
osoby piszącej program, zmienna posiada następujące cechy
podstawowe:
nazwa (identyfikator)
typ
wartość
Nazwa zmiennej pozwala wskazać w programie, o który
fragment pamięci nam chodzi. Aatwiej jest posługiwać się
nazwą ni\ adresem liczbowym (łatwiej zrozumieć napis
printf(imiÄ™); ni\ np. printf(*0x12342);) Kompilator dokonujÄ…c
tłumaczenia napisanego programu zamienia wszystkie nazwy
zmiennych na odpowiednie adresy w pamięci komputera.
Wszystkie nazwy zmiennych przed u\yciem muszą być
zadeklarowane.
Programowanie obiektowe
25
Zmienne
Wartość zmiennej jest tym, co przechowujemy w obszarze pamięci
określanym przez nazwę.
Wartość mo\e się zmieniać w dowolnym momencie w czasie
wykonania programu.
Wartością mo\e być liczba całkowita, zmiennoprzecinkowa (ułamek
dziesiętny), adres w pamięci komputera (tzw. wskaznik), tekst itp.
W momencie deklaracji wartość zmiennej lokalnej
(zadeklarowanej wewnątrz funkcji) jest nieokreślona tzn. jej
wartość jest przypadkowa; zmienne globalne (deklarowane poza
funkcjami) sÄ… inicjowane na zero.
Typ zmiennej określa jaką wartość mo\na wpisać do obszaru
wskazywanego przez nazwę (czy będzie to liczba całkowita,
zmienno-przecinkowa ... , czy te\ inny rodzaj danej).
W zale\ności od rodzaju wartości (typu zmiennej), inny będzie
rozmiar pamięci potrzebny do jej zapamiętania.
Kompilator na podstawie typu określa jaką ilość pamięci nale\y
przydzielić zmiennej i jakie operacje są na niej dopuszczalne.
Programowanie obiektowe
26
Deklarowanie i nadawanie zmiennym wartości
schemat deklaracji zmiennej (globalnej, lokalnej):
typ_zmiennej nazwa_zmiennej;
przykłady deklaracji zmiennych:
int długość, odległość; /*zmienne całkowitoliczbowa*/
float powierzchnia; /*liczba rzeczywista*/
char znak; /*zmienna znakowa*/
schemat nadawania wartości zmiennej:
nazwa_zmiennej = wartość_zmiennej;
przykłady nadawania wartości zmiennym:
długość = 20; /*nadanie wartości wprost*/
powierzchnia = 15.20; /*przecinek jest obowiÄ…zkowy*/
znak =  A ; /*znaki wpisujemy w apostrofach*/
odległość = długość; /*wpisanie wartości jednej zmiennej do drugiej*/
Programowanie obiektowe
27
Wprowadzenie do języka C++
Przykład
#include
using namespace std;
int index;
int main(){
index= 0
int stuff;
stuff = ?, np. 1245068
for (int count; count < 8 ; count++)
count = ?, np. 4217000
{ }
goofy = 0
static unsigned goofy;
napis = ?
char * napis;
}
Jakie wartości przyjmą zmienne z powy\szego kodu?
Programowanie obiektowe
28
Wprowadzenie do języka C++
Podstawowe typy danych:
Typ całkowity:
int - typ całkowity,
long int - typ tzw. długich liczb całkowitych,
short int - typ tzw. krótkich liczb całkowitych,
signed - liczby ze znakiem,
unsigned - liczby bez znaku;
Typ znakowy: char;
Przykład:
long int x; // długa liczba całkowita
long x; // znaczenie: jak wy\ej
short int x; // krótka liczba całkowita
short x; // znaczenie: jak wy\ej
Programowanie obiektowe
29
Wprowadzenie do języka C++
Typ
Liczba bitów Zakres
Podstawowe typy danych (2):
unsigned char 8 0..255
signed char 8 -128..127
unsigned int 16 0..65535
short signed int 16 -32768..32767
signed int 16 -32768..32767
long unsigned int 32 0..4.294.967.295
long signed int 32 -2.147.483.648..2.147.483.647
Programowanie obiektowe
30
Wprowadzenie do języka C++
Podstawowe typy danych:
Typ rzeczywisty:
float  liczby rzeczywiste,
double  liczby podwójnej precyzji,
long double  liczby wysokiej precyzji;
Przykład:
long double x=2.1234;
Typ Liczba bitów Zakres
float 32 3.4*10-38..3.4*1038
double 64 1.7*10-308..1.7*10308
long double 80 3.4*10-4932..1.1*104932
Programowanie obiektowe
31
Zasada widzialności zmiennych i stałych
Zmienne i stałe zdefiniowane na poziomie całego modułu głównego
 main obowiązują we wszystkich miejscach tego modułu, tzn.:
w jego części wykonywalnej
we wszystkich procedurach i funkcjach zawartych w module,
Zmienne i stałe zdefiniowane w funkcji (procedurze) obowiązują
tylko w zakresie tej funkcji (procedury)
Programowanie obiektowe
32
Standardowe moduły biblioteczne języka C++
Na poczÄ…tku tekstu programu u\ywamy sentencji:
#include
#include
................
#include
using namespace std;
Są to tzw. klauzule importu standardowych bibliotek środowiska
języka C++
Nazwy bibliotek standardowych piszemy w otoczeniu tzw.
nawiasów kątowych
Biblioteki są dodatkowymi modułami języka C++, w których
zostały zgromadzone napisane wcześniej funkcje przydatne
programiście
Dzięki takiemu rozwiązaniu nie trzeba ich pisać samodzielnie
Programowanie obiektowe
33
Standardowe moduły biblioteczne języka C++
Przykładowe biblioteki języka C++ :
#include
#include
#include
#include
Przykładowe biblioteki języka C:
#include
#include
#include
#include
Programowanie obiektowe
34
Operatory języka C/C++
Operatory umo\liwiają zapisywanie ró\nego rodzaju operacji
w kodzie zródłowym programu
Omówimy następujące rodzaje operatorów języka C/C++:
operator unarny
operatory arytmetyczne
operatory logiczne
operatory relacyjne
operatory przyrostowe
Programowanie obiektowe
35
Operator unarny
Operator unarny jest zapisywany w postaci znaku  minusa
Umo\liwia on zmianÄ™ znaku dowolnej liczby na przeciwny
Przykład
a = 5;
b =  a;
czyli b =  5
Programowanie obiektowe
36
Operatory arytmetyczne
Umo\liwiajÄ… one zapis operacji arytmetycznych:
* (gwiazdka) - mno\enie,
% (procent) - reszta z dzielenia całkowitoliczbowego,
/ (ukośnik) - dzielenie,
+ (plus) - dodawanie
 (minus)  odejmowanie
W zapisie bardziej zło\onych działań zaleca się stosowanie
nawiasów okrągłych, aby uniknąć nieporozumień związanych z
priorytetami operatorów
Przykłady:
8  2 * 4 // 0
(8  2) * 4 // 24
5 / 2 // 2,
5.0 / 2.0 // 2.5
5 % 2 //1
Programowanie obiektowe
37
Operatory logiczne
Wykorzystywane w wyra\eniach logicznych
Lista operatorów logicznych:
&& - iloczyn logiczny AND
|| - suma logiczna OR
!  negacja logiczna NOT
Przykłady:
zdanie a AND b zapisujemy: a && b,
zdanie a OR b zapisujemy: a || b,
zdanie NOT b zapisujemy: !b,
zdanie a OR NOT(b AND c) zapisujemy: a || !(b && c)
Programowanie obiektowe
38
Operatory relacyjne
Umo\liwiają one wykonywanie ró\nych porównań w zdaniach
logicznych
Lista operatorów relacyjnych:
> większe ni\,
>= większe lub równe ni\,
< mniejsze ni\,
<= mniejsze lub równe ni\,
== równe
!= ró\ne
UWAGA:
Nale\y zwrócić uwagę na istotną ró\nicę pomiędzy
operatorem przypisania =, a operatorem relacyjnym
porównania ==
Programowanie obiektowe
39
Priorytety operatorów porównania i relacyjnych
!
Najwy\szy priorytet
>, >=, <, <=
==, !=
&&
||
Najni\szy priorytet
W zapisie zdań logicznych wykorzystujemy ponadto nawiasy
okrągłe
Programowanie obiektowe
40
Wprowadzenie do języka C++
Podstawowe typy danych:
Konwersja typów:
Operator rzutowania języka C:
" zmienna  a (typu int) będzie
void main() {
poddana konwersji to typu float
int a = 2; float x = 17.1; char c;
przed wykonaniem dodawania,
c = (char)a + (char)x;
" następnie wynik typu float będzie
c = a + x;
poddany konwersji do typu char
}
przed przypisaniem go do
zmiennej  c
Nowy operator rzutowania języka C++:
składania konwersji typu podobna do wywołania funkcji, np.
c = char(a) + char(x);
W C++ dostępne są wszystkie formy konwersji typów;
Programowanie obiektowe
41
Wprowadzenie do języka C++
Operator zasięgu:
Operator :: umo\liwia pełny dostęp do zmiennej globalnej
z pominięciem zmiennej lokalnej, np.
int index = 13;
void main() {
float index = 3.1415;
::index = index + 7;
cout << " Wartość lokalna index to: " << index << "\n";
cout << " Wartość globalna index to: " << ::index <<
"\n";
}
Nadu\ywanie czyni kod zródłowy nieczytelnym;
Co zobaczymy na ekranie?
Wartość lokalna index to: 3.1415
Wartość globalna index to: 10
Programowanie obiektowe
42
Wprowadzenie do języka C++
Operator cout
stosowany do wyprowadzania danych na standardowe urzÄ…dzenie;
zastępuje  printf języka C, ale nie są wymagane informacje formatujące
(typ wyprowadzanych danych), np.
#include
using namespace std;
int main() {
float index = 3.1415; char letter;
letter = 'X';
cout << " Wartość index to: " << index << endl;
cout << " Wartość letter to: " << letter << endl;
}
operator  << (nazywany operatorem wyprowadzania) nakazuje
systemowi wyprowadzić wartość zmiennej lub stałej następującej po nim;
Co zobaczymy na ekranie?
Program 1.2
Programowanie obiektowe
43
Wprowadzenie do języka C++
Operator cin
stosowany do wprowadzania danych ze standardowego
urzÄ…dzenia;
zastępuje  scanf języka C, ale nie są wymagane informacje o
typie wprowadzanych danych;
operator  >> (nazywany operatorem pobierania) nakazuje
wczytać wartość do zmiennej następującej po nim, np.
#include
using namespace std;
int main() {
float index = 3.1415; char znak;
cout << "Podaj liczbe" << endl;
cin >> index;
cout << "Wartosc zmiennej index to: " << index << endl;
cin >> znak;
}
Program 1.3
Co zobaczymy na ekranie?
Programowanie obiektowe
44
Operatory przyrostowe
Umo\liwiają zapis operacji inkrementacji (zwiększenia
wartości liczby całkowitej o jeden) lub dekrementacji
(zmniejszenia wartości liczby całkowitej o jeden)
Inkrementacja:
a = a + 1; zapisujemy operatorem: a++
Dekrementacja:
a = a  1; zapisujemy operatorem: a--
operatory
przyrostowe
Programowanie obiektowe
45
Operatory przyrostowe
Przykład
#include
using namespace std;
Co zobaczymy na ekranie?
int main(void) {
int i, k, n=50;
i = 10;
k = i++;
n+=5;
/* wyświetlenie wartości zmiennych */
cout << "i = " << i << endl;
cout << "k= " << k << endl;
cout << "n= " << n;
getchar(); //Zatrzymanie okna konsoli
return 0;
Program 1.4
}
Programowanie obiektowe
46
Operatory przyrostowe
Przykład
#include
using namespace std;
int main(void) {
int i, k, m=5, n=50;
Co zobaczymy na ekranie?
i = 10;
k = ++i;
n*= 2;
/* wyświetlenie wartości zmiennych */
cout << "i = " << i << endl;
cout << "k= " << k << endl;
cout << "n = " << n << endl;
m = m * ++m;
cout << "m = " << m << endl;
m=5;
m = m * m++;
cout << "m = " << m << endl;
getchar(); //Zatrzymanie okna konsoli
return 0;
Program 1.5
}
Programowanie obiektowe
47
Instrukcje języka C/C++
Wszystkie instrukcje w języku C z wyjątkiem instrukcji złożonej
kończą się średnikiem.
Instrukcja zł żona
łoż
ł ż
ł ż
Instrukcja złożona składa się z nawiasu klamrowego
otwierającego, dowolnych instrukcji (mogą być również kolejne
instrukcje złożone) i nawiasu klamrowego zamykającego:
{
instrukcja1;
instrukcja 2;
instrukcja 3;
{
instrukcja 4;
instrukcja 5;
}
}
Programowanie obiektowe
48
Instrukcja podstawienia
Instrukcja ta zawiera dowolne wyra\enie języka C
Przykłady:
a = 2; /* inicjowanie zmiennej */
a = b = c + 4;
znak =  a ;
Programowanie obiektowe
49
Instrukcja warunkowa
Instrukcja warunkowa umo\liwia wykonanie pewnej instrukcji w
zale\ności od wartości wyra\enia
Wszystkie wartości ró\ne od 0 są w języku C/C++ traktowane
jako prawda; równe 0  jako fałsz
Wyra\enia logiczne są liczone tylko do momentu, w którym mo\na
określić jego wartość
Składnia:
if (wyra\enie) instrukcja1;
lub
if (wyra\enie) instrukcja1;
else instrukcja 2;
wyra\enie `" 0 Ò! PRAWDA
`" Ò!
`" Ò!
`" Ò!
wyra\enie = 0 Ò! FAASZ
Ò!
Ò!
Ò!
Programowanie obiektowe
50
Instrukcja warunkowa
W obu postaciach instrukcja mo\e być instrukcją zło\oną. W pierwszym przypadku
instrukcja wykonuje się, jeśli wartość wyra\enia jest ró\na od 0. W drugim wykonuje
się jedna z dwóch podanych instrukcji (nigdy obie) - pierwsza, gdy wartość wyra\enia
jest ró\na od 0, druga - gdy wartość wyra\enia jest równa 0.
Programowanie obiektowe
51
Instrukcja warunkowa - przykład
if (a > 5)
cout << "a jest większe od 5 << endl;
else
cout << "a jest mniejsze lub równe 5 << endl;
Programowanie obiektowe
52
Instrukcja switch
Instrukcja switch słu\y do wybierania jednego przypadku
z wielu.
Składnia:
switch (zmienna){
case stała1:
Instrukcja 1;
Break;
case stała2:
Instrukcja 2;
Break;
& & & &
default:
Instrukcja n;
Break;
}
Programowanie obiektowe
53
Instrukcja switch  przykład 1
#include
using namespace std;
int main(void) {
int i; char znak;
cout << "Wprowadz liczbe od 1 do 4: " << endl;
cin >> i;
switch(i) {
case 1: cout << "jeden";
break;
case 2: cout << "dwa";
break;
case 3: cout << "trzy";
break;
case 4: cout << "cztery";
break;
default: cout << "Liczba nierozpoznana";
}
cin >> znak;
Program 1.6
return 0;
}
Programowanie obiektowe
54
Instrukcja switch  przykład 2
#include
using namespace std;
int main(void) {
char ch;
do {
cout << endl << "Wprowadz litere (q konczy): ";
cin >> ch;
cout << endl;
switch(ch) {
case 'a': cout << "Nadszedl ";
case 'b': cout << "czas ";
case 'c': cout << "ludzi honoru";
break;
case 'd': cout << "Idzie ";
case 'e': cout << "student";
}
} while(ch != 'q');
Program 1.7
return 0;
}
Programowanie obiektowe
55
Program 1.8
Pętla while
Składnia:
while (wyra\enie) instrukcja;
Instrukcja umieszczona w pętli  while" (mo\e to być instrukcja
zło\ona) jest powtarzana a\ do momentu, gdy wartość wyra\enia
będzie równa 0.
W przypadku, gdy wartość wyra\enia od razu będzie równa 0,
instrukcja nie wykona siÄ™ ani raz.
Jeśli wyra\enie nie przyjmie wartości 0, instrukcja będzie się
wykonywać nieskończoną liczbę razy.
Przykład
char znak;
cin >> znak;
cin >> znak;
cin >> znak;
cin >> znak;
while (znak!= # ) {
cout <<  Niepoprawny znak << endl ;
cout <<  Niepoprawny znak << endl ;
cout <<  Niepoprawny znak << endl ;
cout <<  Niepoprawny znak << endl ;
cin >> znak;
cin >> znak;
cin >> znak;
cin >> znak;
}
}
}
}
Programowanie obiektowe
56
Pętla do
Składnia;
do
instrukcja;
while (wyra\enie);
Pętla  do" jest podobna do pętli  while", z tą ró\nicą, \e warunek
kontynuacji jest sprawdzany po wykonaniu instrukcji.
Oznacza to, \e instrukcja wykona siÄ™ przynajmniej jeden raz.
Programowanie obiektowe
57
Pętla do
Przykład:
{
do
cout << "Zakończyć program? << endl;
while (getchar() !=  T');
}
Jak działa powy\szy kod?
Programowanie obiektowe
58
Pętla for
Składnia:
for (wyra\enie1; wyra\enie2; wyra\enie3) instrukcja;
Przykład:
int i;
char txt[10];
for (i = 0; i < 10; i ++)
txt[i] = 'A';
Jak działa powy\szy kod?
Programowanie obiektowe
59
Pętla for
Składnia:
for (wyra\enie1; wyra\enie2; wyra\enie3) instrukcja;
Wszystkie wyra\enia sÄ… opcjonalne.
Wyra\enie1 jest obliczane przed wejściem do pętli (tylko raz!).
Następnie oblicza się wyra\enie2 i sprawdza czy jest ono ró\ne od 0. Jeśli
tak, wykonywana jest instrukcja i obliczane jest wyra\enie3.
Następnie sprawdzana jest wartość wyra\enia2. Pętla jest wykonywana
a\ do momentu, gdy wartość wyra\enia2 będzie równa 0.
Wyra\enie3 jest zawsze obliczane po wykonaniu instrukcji.
Jeśli wszystkie trzy wyra\enia w pętli for są puste (pętla postaci:
for (;;) instrukcja;
to jest to bezwarunkowa pętla nieskończona.
Instrukcja w pętli for mo\e nie wykonać się ani razu, jeśli wyra\enie2
będzie od razu równe 0.
Pętla for mo\e być pętlą nieskończoną, jeśli wyra\enie2 nigdy nie
przyjmie wartości 0.
Wyra\enie1 będzie zawsze obliczone (dokładnie jeden raz).
Programowanie obiektowe
60
Instrukcja Return
Powoduje wyjście z aktualnie wykonywanej funkcji.
Instrukcja return mo\e wystąpić w dowolnym miejscu w ciele
funkcji.
Instrukcja return mo\e być u\yta z podaniem wyra\enia lub bez.
Jeśli wyra\enie zostanie podane, to jego wartość zostanie obliczona
przed wyjściem z funkcji i zwrócona na zewnątrz.
Składnia:
return;
lub
return wyra\enie;
Programowanie obiektowe
61
Instrukcja Return - przykład
long silnia(int n)
{
long wynik;
int i;
if (n <= 0) return 1;
wynik = 1;
for (i = 1; i <= n; i++)
wynik = wynik * i;
return wynik;
}
Programowanie obiektowe
62
Instrukcja Return - przykład
#include
using namespace std;
long silnia(int n) {
long wynik;
int i;
if (n <= 0) return 1;
wynik = 1;
for (i = 1; i <= n; i++) wynik = wynik * i;
return wynik;
}
int main(){ Program 1.9
int n;
cout << "Podaj n" << endl; cin >> n;
Jaki jest warunek wyjścia z pętli
while(n) {
(i zakończenia obliczeń)?
cout << n << "! = " << silnia(n) << endl;
cout << "Podaj n" << endl; cin >> n;
}
}
Programowanie obiektowe
63
Instrukcja skoku
Składnia:
goto etykieta;
Instrukcja skoku powoduje bezwarunkowe przekazanie
sterowania do instrukcji poprzedzonej etykietÄ…
EtykietÄ™ definiuje siÄ™ w dowolnym miejscu wewnÄ…trz funkcji,
z której została wykonana instrukcja skoku
Składnia:
etykieta:
Etykiet nie trzeba deklarować
Programowanie obiektowe
64
Instrukcja skoku - przykład
#include
using namespace std;
long silnia(int n) {
long wynik=1; int i;
if (n==0) return 1;
for (i = 1; i <= n; i++) wynik = wynik * i;
return wynik;
}
int main(){
int n; char znak;
cout << "Podaj n" << endl; cin >> n;
while(n) {
if (n < 0) goto err;
cout << n << "! = " << silnia(n) << endl;
cout << "Podaj n" << endl; cin >> n;
}
return 0;
err: cout << "Nie mozna obliczyc silni liczby mniejszej od 0!!!" ;
cin >> znak;
}
Program 1.10
Programowanie obiektowe
65
Wprowadzenie do języka C++
Dynamiczny przydział pamięci (alokacja):
w języku C:
malloc() z biblioteki stdlib.h
w języku C++ wbudowano nowy operator new, np.
int *point;
point = new int;
*point = 999;
w porównaniu z malloc() rozmiar przydzielanej pamięci jest
wyliczany automatycznie;
Programowanie obiektowe
66
Wprowadzenie do języka C++
Przykład u\ycia malloc() z sizeof() oraz new:
rekurencyjna
struct node {
deklaracja
char data;
struktury
struct node *nextPtr };
struct node *newPtr, newN;
newPtr = malloc(sizeof(struct node));
newPtr = new node; newPtr
?
(newPtr !=0)
Dane nextPtr
newPtr = new node(newN);
newN.data
newPtr
(newPtr !=0)
Dane nextPtr
Programowanie obiektowe
67
Wprowadzenie do języka C++
Dynamiczne zwolnienie pamięci:
w języku C:
free() z biblioteki stdlib.h, np.
int *point;
point = malloc(int);
free(point);
w języku C++ wbudowano nowy operator delete, np.
delete point;
usuwanie tablicy zaalokowanej dynamicznie:
/* new tab[2]; */
delete [ ] tab;
Programowanie obiektowe
68
Programowanie obiektowe
69


Wyszukiwarka