PO W1 2 id 364238 Nieznany

background image

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

background image

RAZEM

Wykłady

Ć

wiczenia

Laboratoria

Programowanie obiektowe

Programowanie obiektowe

2

RAZEM

Wykłady

Ć

wiczenia

Laboratoria

34

14+

6

14+

background image

Programowanie obiektowe

Warunki zaliczenia przedmiotu (dwa wpisy):

Programowanie obiektowe

3

Warunki zaliczenia przedmiotu (dwa wpisy):



zaliczenie laboratorium



zaliczenie przedmiotu (test wielokrotnego wyboru)

background image

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

background image

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.

background image

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)

background image

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

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

ź

”)

background image

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

background image

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

background image

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;

}

background image

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

background image

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.

background image

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

background image

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

background image

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;

background image

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.

background image

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.

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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)

background image

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

background image

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>

background image

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

background image

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

background image

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

background image

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)

background image

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

ż

ne

UWAGA:

Nale

ż

y zwróci

ć

uwag

ę

na istotn

ą

ż

nic

ę

pomi

ę

dzy

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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

background image

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;

}

}

background image

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

background image

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

background image

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

background image

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;

background image

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;

}

background image

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

background image

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

background image

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

}}}}

background image

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.

Programowanie obiektowe

57

kontynuacji jest sprawdzany po wykonaniu instrukcji.



Oznacza to,

ż

e instrukcja wykona si

ę

przynajmniej jeden raz.

background image

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?

background image

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?

background image

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

background image

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;

background image

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;

}

background image

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

background image

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

ć

background image

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

background image

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;

background image

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

background image

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;

background image

Programowanie obiektowe

69


Wyszukiwarka

Podobne podstrony:
po w1 id 364234 Nieznany
po w1 id 557610 Nieznany
PO lab 5 id 364195 Nieznany
MSI w1 id 309783 Nieznany
po modernizacji id 364203 Nieznany
po w2 id 557612 Nieznany
po w3 id 557613 Nieznany
ALF po paracetamolu id 55196 Nieznany
4OS 2011 w1 id 39381 Nieznany (2)
PO W3 id 364241 Nieznany
Lunar 100 dzien po dniu id 2739 Nieznany
bd w1 id 81977 Nieznany (2)
Analiza finansowa w1 id 60384 Nieznany
po w4szablony id 557614 Nieznany
MSIZ w1 id 309829 Nieznany
PO lab 6 id 364196 Nieznany
Fund w1 2 id 181442 Nieznany
PO lab 5 id 364195 Nieznany
MSI w1 id 309783 Nieznany

więcej podobnych podstron