background image

Programowanie obiektowe

Prowadzący:

dr hab. inŜ. Kazimierz Worwa, prof. WAT

e-mail: 

kworwa@wat.edu.pl

r.a. 2007/2008

UCZELNIA WARSZAWSKA

background image

2

Programowanie obiektowe

16+

-

16x

32

Laboratoria

Ć

wiczenia

Wykłady

RAZEM

Programowanie obiektowe

background image

3

Programowanie obiektowe

Programowanie obiektowe

Warunki zaliczenia przedmiotu (dwa wpisy):

zaliczenie laboratorium 

egzamin (test wielokrotnego wyboru)

background image

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.

background image

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

background image

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)

background image

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

background image

8

Programowanie obiektowe

Jaki dokładnie jest język C ?                      

Jego kod jest niezwykle szybki, ale składnia j

ę

zyka mo

Ŝ

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 

background image

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

background image

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

background image

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++

background image

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);

background image

13

Programowanie obiektowe

Historia języka C/C++

1978r. – pierwszy opis standardu j

ę

zyka – 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++

background image

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

background image

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

background image

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

ź

”)

background image

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

background image

18

Programowanie obiektowe

Deklarowanie procedur i funkcji

Funkcje w j

ę

zyku C/C++ deklarujemy według schematu:

zwracany_typ nazwa_funkcji (typzmienna1,..., typzmiennan);

Procedury w j

ę

zyku C/C++:

void nazwa_procedury (typzmienna1,..., typzmiennan);

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

background image

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;

}

background image

20

Programowanie obiektowe

Komentarze

Komentarz jest fragmentem programu ignorowanym w procesie kompilacji

WyróŜnia się komentarze 

blokowe

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 */

background image

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

background image

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

background image

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  

 

background image

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;

background image

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

ą

tłumaczenia napisanego  programu  zamienia  wszystkie  nazwy 
zmiennych na odpowiednie adresy w pami

ę

ci komputera

Wszystkie  nazwy  zmiennych  przed  u

Ŝ

yciem  musz

ą

by

ć

zadeklarowane.

background image

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. 

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

Ŝ

przydzieli

ć

zmiennej i jakie operacje s

ą

na niej dopuszczalne. 

background image

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*/

background image

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

background image

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 

background image

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

background image

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

background image

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) 

background image

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 

background image

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>

background image

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

background image

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

background image

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

background image

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) 

background image

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
!= 

Ŝ

ne

UWAGA: 

Nale

Ŝ

y zwróci

ć

 uwag

ę

 na istotn

ą

 ró

Ŝ

nic

ę

 pomi

ę

dzy 

operatorem przypisania =, a operatorem relacyjnym 
porównania ==

background image

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

background image

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”

background image

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

background image

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

background image

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

background image

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

background image

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?

background image

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?

background image

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

ę

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; 

}

background image

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’;

background image

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 

≠≠≠≠

PRAWDA

wyraŜenie = 0 

FAŁSZ

background image

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.  

 

 

 

 

background image

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;

background image

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;

}

background image

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

background image

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

background image

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

background image

57

Programowanie obiektowe

Pętla do

Składnia;

do

instrukcja;

while (wyra

Ŝ

enie);

P

ę

tla  „do"  jest  podobna  do  p

ę

tli  „while",  z  t

ą

Ŝ

nic

ą

Ŝ

e  warunek 

kontynuacji jest sprawdzany po wykonaniu instrukcji. 

Oznacza to, 

Ŝ

e instrukcja wykona si

ę

przynajmniej jeden raz. 

background image

58

Programowanie obiektowe

Pętla do

 

 

Przykład:

do 

cout << "Zako

ń

czy

ć

program?” << endl; 

while (getchar() != ‘T'); 

}

Jak działa powyŜszy kod?

background image

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?

background image

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). 

background image

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;

background image

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; 

background image

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ń)?

background image

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

ć

background image

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

background image

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;

background image

67

Programowanie obiektowe

Wprowadzenie do języka C++

rekurencyjna 

deklaracja 

struktury

Przykład u

Ŝ

ycia malloc() 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

background image

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; 

background image

69

Programowanie obiektowe