Programowanie obiektowe
Wydział Cybernetyki
Programowanie obiektowe
Prowadzący:
dr hab. inż. Kazimierz Worwa, prof. WAT
e-mail:
kworwa@wat.edu.pl
r.a. 2009/2010
RAZEM
Wykłady
Ć
wiczenia
Laboratoria
Programowanie obiektowe
Programowanie obiektowe
2
RAZEM
Wykłady
Ć
wiczenia
Laboratoria
34
14+
6
14+
Programowanie obiektowe
Warunki zaliczenia przedmiotu (dwa wpisy):
Programowanie obiektowe
3
Warunki zaliczenia przedmiotu (dwa wpisy):
zaliczenie laboratorium
zaliczenie przedmiotu (test wielokrotnego wyboru)
Materiały do wykładów
Materiały wykorzystywane na wykładach udost
ę
pniam na stronie
http://www.kw.o12.pl/materialy/
folder
Programowanie obiektowe
logowanie:
Programowanie obiektowe
4
logowanie:
nazwa u
ż
ytkownika
hasło
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,
Programowanie obiektowe
5
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
Tematyka przedmiotu
1.
Wprowadzenie do języka C++
2.
Wprowadzenie do klas obiektów
3.
Konstruktory i destruktory
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
Programowanie obiektowe
7
Stałe i zmienne
Operatory arytmetyczne i logiczne
Operatory przyrostowe
Operatory cin i cout
Instrukcje steruj
ą
ce
Instrukcje warunkowe
Instrukcje p
ę
tli
Instrukcje alokacji i dealokacji pami
ę
ci
Ewolucja technik programowania
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
Programowanie obiektowe
8
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.
Historia języka 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
Programowanie obiektowe
9
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++
Język programowania C++
Obiektowy j
ę
zyk programowania o konstrukcji hybrydowej – pochodna j
ę
zyka C;
Ł
ą
czy własno
ś
ci C niskiego poziomu (takie jak arytmetyka wska
ź
ników) z
konstrukcjami wysokiego poziomu (takimi jak klasy czy funkcje wirtualne i
polimorfizm);
Umo
ż
liwia implementacj
ę
dziedziczenia jednobazowego
i wielobazowego (wielodziedziczenia);
Programowanie obiektowe
10
i wielobazowego (wielodziedziczenia);
Mo
ż
liwa jest implementacja egzemplarzy klas: statycznych i dynamicznych;
Umo
ż
liwia definicj
ę
rodzaju i zakresu zmiennych obiektu (public, protected,
private);
Charakterystyczny bł
ą
d: programi
ś
ci u
ż
ywaj
ą
C++ jako “lepszego C” a nie
wykorzystuj
ą
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);
Nowe elementy (niektóre) w stosunku do
j
ę
zyka C
klasy,
sterowanie dost
ę
pem do obiektów publicznych i prywatnych,
konstruktory i destruktory,
klasy zaprzyja
ź
nione,
Programowanie obiektowe
11
klasy zaprzyja
ź
nione,
funkcje wplatane (rozwijane) (ang. inline),
przeci
ąż
enia operatorów i funkcji
przestrze
ń
nazw (np. using namespace std)
argumenty domy
ś
lne
wbudowany typ logiczny Bool
Kształt programu w języku C/C++
Podstaw
ą
programu jest tzw. MODUŁ GŁÓWNY, który jest
zapisywany w postaci kodu
ź
ró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ęść
deklaracyjna
Programowanie obiektowe
12
... // klauzule importu bibliotek
... // deklaracje stałych, zmiennych, typów
... // prototypy (deklaracje) lub definicje funkcji lub procedur
...
main( ) // słowo kluczowe zastrze
ż
one
{ // klamra otwieraj
ą
ca program
... // polecenia wykonywane przez program
}
// klamra zamykaj
ą
ca program
deklaracyjna
część
wykonywalna
Wprowadzenie do języka C++
Pierwszy program
// Pierwszy program w C++
#include <iostream>
using namespace std;
Programowanie obiektowe
13
int main()
{
cout << ”Witaj C++!” << endl;
getchar();
return 0; // program zako
ń
czony poprawnie
} // koniec bloku main
Program 1.1
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 lub definicje procedur i funkcji s
ą
umieszczane w cz
ęś
ci
Programowanie obiektowe
14
deklaracje lub definicje 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
ą
d
ź
”)
Podział programu na moduły
Program mo
ż
e by
ć
zbudowany z wielu modułów, np.:
import
biblioteki standardowe
<stdio.h>, ......, <stdlib.h>
biblioteki własne
„moja_bib1.h”, ..., „moja_bib2.h”
Programowanie obiektowe
15
import
moduł główny
main( )
kompilator, linker
program wykonywalny
Deklarowanie procedur i funkcji
Funkcje w j
ę
zyku C/C++ deklarujemy według schematu:
zwracany_typ nazwa_funkcji (typ1 zmienna1,..., typn zmiennan);
Parametry formalne funkcji (procedury).
funkcja zwraca wartość,
Programowanie obiektowe
16
Procedury w j
ę
zyku C/C++:
void nazwa_procedury (typ1 zmienna1,..., typn zmiennan);
Parametry formalne funkcji (procedury).
W czasie wywołania funkcji (procedury)
w ich miejsce wstawiane są parametry
aktualne, które przekazują wartości do
podprogramu, na których on operuje
procedura nie zwraca wartości,
co oznaczamy słowem void
funkcja zwraca wartość,
obliczoną w czasie jej
wykonania
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*/
}
Programowanie obiektowe
17
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;
}
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
Programowanie obiektowe
18
Przykłady
/* To jest komentarz blokowy. Może zajmować kilka wierszy */
// To jest komentarz liniowy
.
Kończy się z końcem wiersza
Uwaga na nierozwa
ż
ne umieszczenie w zakresie komentarza
linii kodu
ź
ródłowego, np.
int a;
/*Komentarz w stylu
int b;
j
ę
zyka C */
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).
Identyfikatory
Programowanie obiektowe
19
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.
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
Programowanie obiektowe
20
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
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:
Programowanie obiektowe
21
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
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):
Programowanie obiektowe
22
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;
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
Programowanie obiektowe
23
warto
ść
Nazwa zmiennej pozwala wskaza
ć
w programie, o który
fragment pami
ę
ci nam chodzi. Łatwiej jest posługiwa
ć
si
ę
nazw
ą
ni
ż
adresem liczbowym.
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.
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. wska
ź
nik), tekst itp.
W momencie deklaracji warto
ść
zmiennej lokalnej (zadeklarowanej
Programowanie obiektowe
24
W momencie deklaracji warto
ść
zmiennej lokalnej (zadeklarowanej
wewn
ą
trz funkcji) jest nieokre
ś
lona tzn. jej warto
ść
jest przypadkowa;
zmienne globalne (deklarowane poza funkcjami) oraz poprzedzone
specyfikatorem static s
ą
inicjowane na warto
ść
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.
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*/
Programowanie obiektowe
25
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*/
Wprowadzenie do języka C++
#include <iostream>
using namespace std;
int index;
int main(){
index= 0
Przykład
Programowanie obiektowe
26
int stuff;
for (int count; count < 8 ; count++)
{ }
static unsigned goofy;
char *napis;
}
Jakie warto
ś
ci przyjm
ą
zmienne z powy
ż
szego kodu?
index= 0
stuff = ?, np. 1245068
count = ?, np. 4217000
goofy = 0
napis = ?
Program 1.1a
Program 1.1b
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,
Programowanie obiektowe
27
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
Wprowadzenie do języka C++
Podstawowe typy danych (2):
Typ
Liczba bitów
Zakres
unsigned char
8
0..255
signed char
8
-128..127
unsigned int
16
0..65535
Programowanie obiektowe
28
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
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:
Programowanie obiektowe
29
Przykład:
long double x=2.1234;
Typ
Liczba bitów
Zakres
float
32
3.4*10
-38
..3.4*10
38
double
64
1.7*10
-308
..1.7*10
308
long double
80
3.4*10
-4932
..1.1*10
4932
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,
Programowanie obiektowe
30
Zmienne i stałe zdefiniowane w funkcji (procedurze) obowi
ą
zuj
ą
tylko w zakresie tej funkcji (procedury)
Standardowe moduły biblioteczne języka C++
Na pocz
ą
tku tekstu programu u
ż
ywamy sentencji:
#include <nazwa_biblioteki_1>
#include <nazwa_biblioteki_2>
................
#include <nazwa_biblioteki_N>
using namespace std;
Programowanie obiektowe
31
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
Standardowe moduły biblioteczne języka C++
Przykładowe biblioteki j
ę
zyka C++ :
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
Programowanie obiektowe
32
#include <string>
Przykładowe biblioteki j
ę
zyka C:
#include <stdio.h>
#include <cmath.h>
#include <ctype.h>
#include <cstring.h>
Operatory języka C/C++
Operatory umo
ż
liwiaj
ą
zapisywanie ró
ż
nego rodzaju operacji
w kodzie
ź
ródłowym programu
Omówimy nast
ę
puj
ą
ce rodzaje operatorów j
ę
zyka C/C++:
operator unarny
operatory arytmetyczne
Programowanie obiektowe
33
operatory logiczne
operatory relacyjne
operatory przyrostowe
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;
Programowanie obiektowe
34
b = – a;
czyli b = – 5
Operatory arytmetyczne
Umo
ż
liwiaj
ą
one zapis operacji arytmetycznych:
* (gwiazdka) - mno
ż
enie,
% (procent) - reszta z dzielenia całkowitoliczbowego,
/ (uko
ś
nik) - dzielenie,
+ (plus) - dodawanie
– (minus) – odejmowanie
Programowanie obiektowe
35
– (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
Operatory logiczne
Wykorzystywane w wyra
ż
eniach logicznych
Lista operatorów logicznych:
&& - iloczyn logiczny AND
|| - suma logiczna OR
! – negacja logiczna NOT
Programowanie obiektowe
36
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)
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
ż
,
Programowanie obiektowe
37
<
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 ==
Priorytety operatorów porównania i relacyjnych
Najwy
ż
szy priorytet
!
>, >=, <, <=
==, !=
Programowanie obiektowe
38
==, !=
&&
Najni
ż
szy priorytet
||
W zapisie zda
ń
logicznych wykorzystujemy ponadto nawiasy
okr
ą
głe
Wprowadzenie do języka C++
Podstawowe typy danych:
Konwersja typów:
Operator rzutowania j
ę
zyka C:
void main() {
int a = 2; float x = 17.1; char c;
c = (char)a + (char)x;
c = a + x;
• zmienna „a” (typu int) będzie
poddana konwersji to typu float
przed wykonaniem dodawania,
• następnie wynik typu float będzie
poddany konwersji do typu char
Programowanie obiektowe
39
c = a + x;
}
Nowy operator rzutowania j
ę
zyka C++:
składnia konwersji typu podobna do wywołania funkcji, np.
c = char(a) + char(x);
W C++ dost
ę
pne s
ą
wszystkie formy konwersji typów;
poddany konwersji do typu char
przed przypisaniem go do
zmiennej „c”
Program 1.1c
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;
Programowanie obiektowe
40
float index = 3.1415;
::index = index + 7;
cout << " Warto
ść
lokalna index to: " << index << endl;
cout << " Warto
ść
globalna index to: " << ::index << endl;
}
Nadu
ż
ywanie czyni kod
ź
ródłowy nieczytelnym;
Co zobaczymy na ekranie?
Wartość lokalna index to: 3.1415
Wartość globalna index to: 10
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 <iostream>
using namespace std;
int main() {
Programowanie obiektowe
41
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
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 <iostream>
Programowanie obiektowe
42
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;
}
Co zobaczymy na ekranie?
Program 1.3
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++
Programowanie obiektowe
43
a = a + 1; zapisujemy operatorem:
a++
Dekrementacja:
a = a – 1; zapisujemy operatorem:
a
--
operatory
przyrostowe
Operatory przyrostowe
Przykład
#include <stdio.h>
int main(void) {
int i, j;
i = 10;
Programowanie obiektowe
44
j = i++;
// Najpierw przypisanie, potem inkrementacja
/* Wy
ś
wietlenie warto
ś
ci zmiennych i oraz j */
printf("i = %d",i);
printf(", j= %d", j);
getchar();
// Zatrzymanie okna konsoli
return 0;
}
Program 1.3a
Operatory przyrostowe
Przykład
#include <stdio.h>
int main(void) {
int i, j;
i = 10;
j = ++i;
// Najpierw inkrementacja, potem przypisanie
Programowanie obiektowe
45
j = ++i;
// Najpierw inkrementacja, potem przypisanie
/* Wy
ś
wietlenie warto
ś
ci zmiennych i oraz j */
printf("i = %d",i);
printf(", j= %d", j);
getchar();
// Zatrzymanie okna konsoli
return 0;
}
Program 1.3b
Operatory przyrostowe
Przykład
#include <iostream>
using namespace std;
int main(void) {
int i, k, n=50;
i = 10;
Co zobaczymy na ekranie?
Programowanie obiektowe
46
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
Operatory przyrostowe
Przykład
#include <iostream>
using namespace std;
int main(void) {
int i, k, m=5, n=50;
i = 10;
k = ++i;
n*= 2;
/* wy
ś
wietlenie warto
ś
ci zmiennych */
Co zobaczymy na ekranie?
Programowanie obiektowe
47
/* 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
Instrukcje języka C/C++
Wszystkie instrukcje w j
ę
zyku C z wyj
ą
tkiem instrukcji zło
ż
onej
ko
ń
cz
ą
si
ę ś
rednikiem.
Instrukcja zło
ż
ona
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:
Programowanie obiektowe
48
instrukcje zło
ż
one) i nawiasu klamrowego zamykaj
ą
cego:
{
instrukcja1;
instrukcja 2;
instrukcja 3;
{
instrukcja 4;
instrukcja 5;
}
}
Instrukcja podstawienia
Instrukcja ta zawiera dowolne wyra
ż
enie j
ę
zyka C
Przykłady:
a = 2;
/* inicjowanie zmiennej */
Programowanie obiektowe
49
a = 2;
/* inicjowanie zmiennej */
a = b = c + 4;
znak = ‘a’;
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
Programowanie obiektowe
50
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 ⇒
⇒
⇒
⇒
FAŁSZ
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
cout << "a jest mniejsze lub równe 5 << endl;
Instrukcja switch
Instrukcja switch słu
ż
y do wybierania jednego przypadku
z wielu.
Składnia:
switch (zmienna){
case stała1:
Instrukcja 1;
Break;
Programowanie obiektowe
53
Break;
case stała2:
Instrukcja 2;
Break;
…………
default:
Instrukcja n;
Break;
}
Instrukcja switch – przykład 1
#include <iostream>
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;
Programowanie obiektowe
54
break;
case 2: cout << "dwa";
break;
case 3: cout << "trzy";
break;
case 4: cout << "cztery";
break;
default: cout << "Liczba nierozpoznana";
}
cin >> znak;
return 0;
}
Program 1.6
Instrukcja switch – przykład 2
#include <iostream>
using namespace std;
int main(void) {
char ch;
do {
cout << endl << "Wprowadz litere (q konczy): ";
cin >> ch;
cout << endl;
Programowanie obiektowe
55
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');
return 0;
}
Program 1.7
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.
Program 1.8
Programowanie obiektowe
56
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
cin
cin
cin >>
>>
>>
>> znak
znak
znak
znak;;;;
while (znak!=‘#’) {
cout
cout
cout
cout <<
<<
<<
<< ““““Niepoprawny
Niepoprawny
Niepoprawny
Niepoprawny znak”
znak”
znak”
znak” <<
<<
<<
<< endl
endl
endl
endl ;;;;
cin
cin
cin
cin >>
>>
>>
>> znak
znak
znak
znak;;;;
}}}}
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.
Programowanie obiektowe
57
kontynuacji jest sprawdzany po wykonaniu instrukcji.
Oznacza to,
ż
e instrukcja wykona si
ę
przynajmniej jeden raz.
Pętla do
Przykład:
Programowanie obiektowe
58
Przykład:
{
do
cout << "Zako
ń
czy
ć
program?” << endl;
while (getchar() != ‘T');
}
Jak działa powyższy kod?
Pętla for
Składnia:
for (wyra
ż
enie1; wyra
ż
enie2; wyra
ż
enie3) instrukcja;
Przykład:
Programowanie obiektowe
59
int i;
char txt[10];
for (i = 0; i < 10; i ++)
txt[i] = 'A';
Jak działa powyższy kod?
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.
Programowanie obiektowe
60
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).
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
Programowanie obiektowe
61
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;
Instrukcja Return - przykład
long silnia(int n)
{
long wynik;
int i;
if (n <= 0) return 1;
Programowanie obiektowe
62
if (n <= 0) return 1;
wynik = 1;
for (i = 1; i <= n; i++)
wynik = wynik * i;
return wynik;
}
Instrukcja Return - przykład
#include <iostream>
using namespace std;
long int silnia(int n) {
// -2 147 483 648 - 2 147 483 647
long int wynik;
int i;
if (n <= 0) return 1;
wynik = 1;
for (i = 1; i <= n; i++) wynik = wynik * i;
Programowanie obiektowe
63
for (i = 1; i <= n; i++) wynik = wynik * i;
return wynik;
}
int main(){
int n;
cout << "Podaj n" << endl; cin >> n;
while(n) {
cout << n << "! = " << silnia(n) << endl;
cout << "Podaj n" << endl; cin >> n;
}
}
Program 1.9
Jaki jest warunek wyjścia z pętli
(i zakończenia obliczeń)?
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,
Programowanie obiektowe
64
Etykiet
ę
definiuje si
ę
w dowolnym miejscu wewn
ą
trz funkcji,
z której została wykonana instrukcja skoku
Składnia:
etykieta:
Etykiet nie trzeba deklarowa
ć
Instrukcja skoku - przykład
#include <iostream>
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(){
Programowanie obiektowe
65
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
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.
Programowanie obiektowe
66
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;
Wprowadzenie do języka C++
rekurencyjna
deklaracja
struktury
Przykład u
ż
ycia malloc() z sizeof() oraz new:
struct node {
char data;
struct node *nextPtr };
struct node *newPtr, newN;
newPtr = malloc(sizeof(struct node));
Programowanie obiektowe
67
newPtr = malloc(sizeof(struct node));
newPtr = new node;
newPtr = new node(newN);
newPtr
(newPtr !=0)
Dane
nextPtr
?
nextPtr
newPtr
(newPtr !=0)
Dane
newN.data
Wprowadzenie do języka C++
Dynamiczne zwolnienie pami
ę
ci:
w j
ę
zyku C:
free() z biblioteki stdlib.h, np.
int *point;
point = malloc(int);
Programowanie obiektowe
68
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
69