Programowanie obiektowe
Prowadzący:
dr hab. inż. Kazimierz Worwa, prof. WAT
e-mail:
kworwa@wat.edu.pl
r.a. 2007/2008
UCZELNIA WARSZAWSKA
2
Programowanie obiektowe
16+
-
16x
32
Laboratoria
Ć
wiczenia
Wykłady
RAZEM
Programowanie obiektowe
3
Programowanie obiektowe
Programowanie obiektowe
Warunki zaliczenia przedmiotu (dwa wpisy):
zaliczenie laboratorium
egzamin (test wielokrotnego wyboru)
4
Programowanie obiektowe
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.
5
Programowanie obiektowe
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
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)
7
Programowanie obiektowe
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
8
Programowanie obiektowe
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
9
Programowanie obiektowe
Jaki dokładnie jest język C ?
C jest j
ę
zykiem tzw.
ś
redniego poziomu:
Niski poziom – języki maszynowe,
assemblery
Ś
redni poziom – język C
Wysoki poziom – języki pochodzące
od Algola: Pascal, Modula2, ADA, Basic,
jak również C++, Java
wydajność kodu
wynikowego C
zbliżona do wydajności
języka maszynowego
składnia kodu
ź
ródłowego C
zbliżona do składni
języka wysokiego poziomu
10
Programowanie obiektowe
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
11
Programowanie obiektowe
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.
Język programowania C++
12
Programowanie obiektowe
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);
13
Programowanie obiektowe
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++
14
Programowanie obiektowe
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 */
.. /* deklaracje stałych, zmiennych, typów */
.. /* prototypy lub deklaracje funkcji lub procedur */
..
main( ) /* słowo domy
ś
lne i zastrze
ż
one */
{ /* klamra otwieraj
ą
ca program*/
.. /* polecenia wykonywane przez program */
..
} /* klamra zamykaj
ą
ca program*/
część
deklaracyjna
część
wykonywalna
15
Programowanie obiektowe
Wprowadzenie do języka C++
Pierwszy program
// Pierwszy program w C++
#include <iostream>
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
16
Programowanie obiektowe
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
ą
d
ź
”)
17
Programowanie obiektowe
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”
moduł główny
z funkcją main( )
kompilator, linker
program wykonywalny
18
Programowanie obiektowe
Deklarowanie procedur i funkcji
Funkcje w j
ę
zyku C/C++ deklarujemy według schematu:
zwracany_typ nazwa_funkcji (typ1 zmienna1,..., typn zmiennan);
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
19
Programowanie obiektowe
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;
}
20
Programowanie obiektowe
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
ź
ródłowego, np.
int a;
/*Komentarz w stylu
int b;
j
ę
zyka C */
21
Programowanie obiektowe
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.
Identyfikatory
22
Programowanie obiektowe
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
23
Programowanie obiektowe
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
24
Programowanie obiektowe
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;
25
Programowanie obiektowe
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. Łatwiej 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.
26
Programowanie obiektowe
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 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.
27
Programowanie obiektowe
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*/
28
Programowanie obiektowe
Wprowadzenie do języka C++
#include <iostream>
using namespace std;
int index;
int main(){
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 = ?
Przykład
29
Programowanie obiektowe
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
30
Programowanie obiektowe
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
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
31
Programowanie obiektowe
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*10
38
double
64
1.7*10
-308
..1.7*10
308
long double
80
3.4*10
-4932
..1.1*10
4932
32
Programowanie obiektowe
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)
33
Programowanie obiektowe
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;
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
34
Programowanie obiektowe
Standardowe moduły biblioteczne języka C++
Przykładowe biblioteki j
ę
zyka C++ :
#include <iostream>
#include <cmath>
#include <cstring>
#include <string>
Przykładowe biblioteki j
ę
zyka C:
#include <stdio.h>
#include <cmath.h>
#include <ctype.h>
#include <cstring.h>
35
Programowanie obiektowe
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
operatory logiczne
operatory relacyjne
operatory przyrostowe
36
Programowanie obiektowe
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
37
Programowanie obiektowe
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
38
Programowanie obiektowe
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)
39
Programowanie obiektowe
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 ==
40
Programowanie obiektowe
Priorytety operatorów porównania i relacyjnych
Najwy
ż
szy priorytet
!
>, >=, <, <=
==, !=
&&
Najni
ż
szy priorytet
||
W zapisie zda
ń
logicznych wykorzystujemy ponadto nawiasy
okr
ą
głe
41
Programowanie obiektowe
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;
}
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;
• 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
przed przypisaniem go do
zmiennej „c”
42
Programowanie obiektowe
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
ź
ródłowy nieczytelnym;
Co zobaczymy na ekranie?
Wartość lokalna index to: 3.1415
Wartość globalna index to: 10
43
Programowanie obiektowe
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() {
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
44
Programowanie obiektowe
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>
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
45
Programowanie obiektowe
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
46
Programowanie obiektowe
Operatory przyrostowe
Przykład
#include <iostream>
using namespace std;
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
Co zobaczymy na ekranie?
47
Programowanie obiektowe
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 */
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
Co zobaczymy na ekranie?
48
Programowanie obiektowe
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:
{
instrukcja1;
instrukcja 2;
instrukcja 3;
{
instrukcja 4;
instrukcja 5;
}
}
49
Programowanie obiektowe
Instrukcja podstawienia
Instrukcja ta zawiera dowolne wyra
ż
enie j
ę
zyka C
Przykłady:
a = 2;
/* inicjowanie zmiennej */
a = b = c + 4;
znak = ‘a’;
50
Programowanie obiektowe
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 ⇒
⇒
⇒
⇒
FAŁSZ
51
Programowanie obiektowe
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.
52
Programowanie obiektowe
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;
53
Programowanie obiektowe
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;
}
54
Programowanie obiektowe
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;
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
55
Programowanie obiektowe
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;
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
56
Programowanie obiektowe
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
cin
cin
cin >> znak;
>> znak;
>> znak;
>> znak;
while (znak!=‘#’) {
cout
cout
cout
cout <<
<<
<<
<< ““““Niepoprawny znak” <<
Niepoprawny znak” <<
Niepoprawny znak” <<
Niepoprawny znak” << endl
endl
endl
endl ;;;;
cin
cin
cin
cin >> znak;
>> znak;
>> znak;
>> znak;
}}}}
Program 1.8
57
Programowanie obiektowe
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.
58
Programowanie obiektowe
Pętla do
Przykład:
{
do
cout << "Zako
ń
czy
ć
program?” << endl;
while (getchar() != ‘T');
}
Jak działa powyższy kod?
59
Programowanie obiektowe
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?
60
Programowanie obiektowe
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).
61
Programowanie obiektowe
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;
62
Programowanie obiektowe
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;
}
63
Programowanie obiektowe
Instrukcja Return - przykład
#include <iostream>
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(){
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ń)?
64
Programowanie obiektowe
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
ć
65
Programowanie obiektowe
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(){
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
66
Programowanie obiektowe
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;
67
Programowanie obiektowe
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));
newPtr = new node;
newPtr = new node(newN);
newPtr
(newPtr !=0)
Dane
nextPtr
?
nextPtr
newPtr
(newPtr !=0)
Dane
newN.data
68
Programowanie obiektowe
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;
69
Programowanie obiektowe