PO W1 2 II ZIN id 364239 Nieznany

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

ż

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

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

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

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

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

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

ą

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

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.

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

ą

ż

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

ę

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;

}

}

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

≠≠≠≠

0

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

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


Wyszukiwarka

Podobne podstrony:
PO W1 IV ZIN id 364236 Nieznany
PO W 5 6 II ZIN id 364233 Nieznany
PO W3 IV ZIN id 364242 Nieznany
PO W2 IV ZIN id 364240 Nieznany
PO W1 2 II ZIN
II Wyklad id 210139 Nieznany
II 83 id 209795 Nieznany
II 31 id 209763 Nieznany
II czesc id 209842 Nieznany
biochemia II 1 plus id 86425 Nieznany (2)
MSI w1 konspekt 2010 id 309789 Nieznany
PO W7 8 II ZIN
F II wyklad 4 id 167240 Nieznany
II 32 id 209764 Nieznany
II 43 id 209770 Nieznany
D 2 calosc I,II,III id 130089 Nieznany

więcej podobnych podstron