26
1 C1: Deosebiri intre C si C++ Programare Orientata pe Obiecte - POO Bibliografie: •Florin Munteanu, Gheorghe Musca, Florin Moraru, “C tehnici de Programare”, Ed. Joint Printing House, Bucuresti 1995 •Mihaela Oprea “Programare Orientata pe Obiecte”, Ed. MatrixRom, Bucuresti, 2003 Cuprins: •Introducere •Comentarii •Pozitia declaratiilor in bloc •Operatorul de rezolutie “::” •Functii inline •Argumente de functii cu valori implicite •Supradefinirea functiilor •Operatii de intrare/iesire •Tipul referinta •Functii in structuri

POO

Embed Size (px)

DESCRIPTION

Programare orientata pe obiecte

Citation preview

1

C1:

Deo

sebi

ri in

tre

C si

C++

Prog

ram

are

Orie

ntat

a pe

Obi

ecte

- P

OO

Bib

liogr

afie

:

•Flo

rin M

unte

anu,

Ghe

orgh

e M

usca

, Flo

rin M

orar

u, “

C te

hnic

i de

Prog

ram

are”

, Ed.

Join

t Prin

ting

Hou

se, B

ucur

esti

1995

•Mih

aela

Opr

ea “

Prog

ram

are

Ori

enta

ta p

e O

biec

te”,

Ed.

Mat

rixR

om,

Buc

ures

ti, 2

003

Cup

rins:

•Int

rodu

cere

•Com

enta

rii•P

oziti

a de

clar

atiil

or in

blo

c•O

pera

toru

l de

rezo

lutie

“::”

•Fun

ctii

inlin

e•A

rgum

ente

de

func

tii c

u va

lori

impl

icite

•Sup

rade

finire

a fu

nctii

lor

•Ope

ratii

de

intra

re/ie

sire

•Tip

ul re

ferin

ta•F

unct

ii in

stru

ctur

i

2

0. In

trod

ucer

e

C1:

Deo

sebi

ri in

tre

C si

C++

• *

.c=>

*.cp

p

• #

defin

e _c

plus

plus

d.p.

d.v.

al fisier

elor

d.p.

d.v.

al

compilato

rului

Exis

ta m

edii

de d

ezvo

ltare

(Bor

land

C)

care

au

un c

ompi

lato

r uni

c pe

ntru

prog

ram

ele

scri

se in

C si

C+

+ (c

are

treb

uie

info

rmat

e)!

3

C1:

Deo

sebi

ri in

tre

C si

C++

1. C

omen

tari

i

in C

:

/* c

itire

dat

a */

getd

ate(

&da

ta);

sune

t();

prin

tf("\

n

Azi

sunt

em in

:%

d.%

d.%

d\n\

n",d

ata.

zi,d

ata.

luna

,dat

a.an

);/*

des

chid

ere

fisie

rfh

andl

er=f

open

("C

:\\D

ATE

\\REM

EMB

ER.D

AT"

,"a")

;fc

lose

(fha

ndle

r);*

/

in C

++ :

int s

tare

_Pan

el =

0;

// bu

toan

e (8

): Sc

enar

iu, S

alva

re, C

onfig

urar

e, D

ecla

nsar

e, A

naliz

a,//

Adn

otar

i, A

juto

r, Ie

sire

// st

ari

(4):

Initi

ala,

Dec

lans

are,

Ana

liza,

Sim

ular

ein

t Sta

riBut

oane

[4][

8] =

{{0,

1,1,

0,0,

0,0,

0},{

1,1,

0,1,

0,0,

0,0}

,{0,

1,0,

1,1,

0,0,

0},{

1,1,

1,1,

1,1,

1,1}

};//

int S

tariB

utoa

ne[2

][3]

= {

{1,2

,3},

{4,5

,6}}

;//

= {{

0,1,

1,0,

0,0,

0,0}

,{1,

1,0,

1,0,

0,0,

0},{

1,1,

0,1,

0,0,

0,0}

};in

t g_N

otep

adEx

eHan

dle;

Dac

a lin

ia e

ste

prea

lung

a si

se tr

ece

auto

mat

pe

linia

urm

atoa

re si

com

enta

riu

“nu

mai

are

efe

ct”!

4

C1:

Deo

sebi

ri in

tre

C si

C++

2. P

oziti

a de

clar

atiil

or in

pro

gram

in C

:

la inc

eput

in C

++ :

oriund

e in p

rogr

am

5

C1:

Deo

sebi

ri in

tre

C si

C++

in C

:m

ain(

){ ch

ar c

,x;

int n

otify

Cou

nt =

42;

/* W

ait f

or a

t lea

st 5

0 by

tes i

n qu

eue

*/in

t eve

ntC

har

= 1

3; /*

Wai

t for

LF

*/in

t eve

ntM

ask

= L

WR

S_R

XFL

AG

;in

t com

Port

= 5;

hand

le =

Loa

dPan

el (0

, "R

eg_T

est_

62_R

S232

.uir"

, BI)

;D

ispl

ayPa

nel (

hand

le);

SetC

trlA

ttrib

ute(

hand

le,B

I_in

dic_

com

_man

,ATT

R_D

IMM

ED,1

);//

Des

chid

ere

port

seria

lO

penC

omC

onfig

(5, "

CO

M5"

, 960

0, 0

, 8, 1

, 512

, 512

);Se

tCom

Tim

e (5

, 0.5

0);

// in

itial

izar

e co

mca

llbac

kIn

stal

lCom

Cal

lbac

k (c

omPo

rt, e

vent

Mas

k, n

otify

Cou

nt, e

vent

Cha

r,M

essa

geR

ecei

ved,

NU

LL);

SetId

leEv

entR

ate

(50)

;In

stal

lMai

nCal

lbac

k (G

etD

ata,

(voi

d *)

&x

, 1);

Run

Use

rInt

erfa

ce()

;}

la inc

eput

6

C1:

Deo

sebi

ri in

tre

C si

C++

in C

++ :

oriund

e in p

rogr

am

float

sum

(flo

at v

[], i

nt n

){

float

s;fo

r (in

t i=0

; i<n

; i++

)s+

=v[i]

;re

turn

s;} At

entie

la v

izib

ilila

tea

vari

abile

i res

pect

ive:

// vi

zibi

litat

eif(

m>2

3.2)

{do

uble

dv;

//……

……

} else

{//…

……

…..

dv +

= 3.

2;//

eror

e!!!

!//…

……

…..

}

7

C1:

Deo

sebi

ri in

tre

C si

C++

3. O

pera

toru

l de

rezo

lutie

“::

” :

int x

;//

glob

alvo

id fu

nct(v

oid)

{in

t x =

0;

// lo

cal

::x =

5;

// gl

obal

x =

::x;

// co

rect

dar

ner

ecom

anda

t}

De

fapt

ace

st o

pera

tor a

fost

intr

odus

pen

tru

alt s

cop!

8

C1:

Deo

sebi

ri in

tre

C si

C++

4. fu

nctii

inlin

e:

inlin

e in

t max

(int a

, int

b)

{re

turn

a>b

? a

:b;

} // ut

iliza

re:

int z

= m

ax(x

, y);

Au e

fect

doa

r asu

pra

codu

lui g

ener

at d

e co

mpi

lato

r.

in C

++ :

in C

am

inta

lnit

ceva

sim

ilar:

# de

fine

max

(A, B

) ((A

) > (B

) ? (A

):(B

)

9

C1:

Deo

sebi

ri in

tre

C si

C++

5. a

rgum

ente

de

func

tii c

u va

lori

impl

icite

:

int f

(int k

= 0

)//

prot

otip

pt.

f{

retu

rn k

*k;

} // ut

iliza

re:

prin

tf(“%

d %

d\n”

, f()

, f(5

));

// va

afis

a 0

5

In C

++

pot

exi

sta

func

tii c

u m

ai p

utin

e ar

gum

ente

dec

at in

cel

e di

n de

clar

atie

10

C1:

Deo

sebi

ri in

tre

C si

C++

void

prin

tvec

t(int

v[]

, int

n, c

har*

text

= “

”)

{pr

intf(

“%s\

n”, t

ext);

for(

int i

= 0

; i <

n; i

++)

prin

tf(“%

d ”,

v[i])

;pr

intf(

“\n”

);} //

utili

zare

:pr

intv

ect(x

, nx,

“ve

ctor

ul x

”);

prin

tvec

t(y, n

y);

Este

bin

e sa

ave

m g

rija

de

vari

abile

le se

nsib

ile –

de

evita

t situ

atii

sens

ibile

de

genu

l im

part

irii

la 0

.

11

C1:

Deo

sebi

ri in

tre

C si

C++

6. S

upra

defin

irea

func

tiilo

r:

doub

le a

rie_d

rept

(dou

ble

lun,

dou

ble

lat)

{re

turn

lun*

lat;

}

In C

++

pot

exi

sta

func

tii (d

iferi

te) c

u ac

elas

i num

e da

r num

ar si

tip

alpa

ram

etri

lor d

iferi

t.

Exe

mpl

u (a

rie

a un

ui d

rept

ungh

i):

int a

rie_d

rept

(int l

un, i

nt la

t){

retu

rn lu

n*la

t;} flo

at a

rie_d

rept

(flo

at lu

n, fl

oat l

at)

{re

turn

lun*

lat;

}

12

C1:

Deo

sebi

ri in

tre

C si

C++

float

arie

_dre

pt(f

loat

lun)

{re

turn

lun*

lun;

} // ut

iliza

re:

prin

tf(“%

d %

f %f %

f”, a

rie_d

rept

(2, 4

), ar

ie_d

rept

(2.5

, 2.2

), ar

ie_d

rept

(2.5

), ar

ie_d

rept

(2.5

, 4.7

));

In C

++

se p

ot su

prad

efin

i chi

ar si

ope

rato

rii d

in C

(+, -

, ++

, --,

/, et

c.).

13

C1:

Deo

sebi

ri in

tre

C si

C++

7. o

pera

tii d

e in

trar

e/ie

sire

(citi

re/s

crie

re) d

e la

cons

ola

in C

++ :

•de

ce c

onso

la?

– is

toric

•cin

, cou

t

prin

tf, sc

anf

•treb

uie

incl

usa

bibl

iote

ca:

#inc

lude

<io

stre

am.h

>•c

in <

< …

……

..;//

cin

– es

te o

biec

tul

•//

<< -

este

ope

rato

rul

Exe

mpl

e:

cin

>> x

;ci

n >>

a >

> b;

char

*tex

t = “

text

exe

mpl

u”;

cout

<<

text

;co

ut <

< “

” <<

“\n

”;co

ut <

< x;

cout

<<

x <<

y;

cout

<<

x <<

“ “

<<

y;co

ut <

< “x

=” <

< x;

cout

<<

“x=”

<<

x

<

< “y

=” <

< y;

14

C1:

Deo

sebi

ri in

tre

C si

C++

8. T

ipul

ref

erin

ta:

Stud

iu d

e ca

z pe

ntru

con

stru

irea

une

i fun

ctii

care

inte

rsch

imba

dou

a va

riab

ile:

shim

ba_1

()//

func

tie fa

ra p

aram

etri

{in

t tem

p;te

mp

= a;

a =

b;b

= te

mp;

} // ut

iliza

re;

int a

,b;

// va

riabi

le g

loba

lea

= 3;

b =

4;

prin

tf(“a

=%d

b=%

d\n”

, a, b

);sc

him

ba_1

();

prin

tf(“a

=%d

b=%

d\n”

, a, b

);

a)

15

C1:

Deo

sebi

ri in

tre

C si

C++

•fun

ctia

schi

mba

doa

r var

iabi

lele

glo

bale

a si

b•a

re o

vite

za m

ica

•spa

tiu d

e m

emor

ie e

ste

disc

utab

il (v

aria

bila

tem

p di

spar

e da

r apa

re st

iva

- des

en)

•sun

t nec

esar

e al

te v

aria

nte

16

C1:

Deo

sebi

ri in

tre

C si

C++

schi

mba

_2(in

t ca,

int c

b){

int t

emp

= ca

;ca

= c

b;cb

= te

mp;

} // ut

iliza

re;

int a

,b;

// va

riabi

le g

loba

lea

= 3;

b =

4;

prin

tf(“a

=%d

b=%

d\n”

, a, b

);sc

him

ba_2

(a, b

);pr

intf(

“a=%

d b=

%d\

n”, a

, b);

// ac

elas

i rez

ulta

t – d

e ce

?

b1)

// es

te o

var

iant

a gr

esita

!!!

17

C1:

Deo

sebi

ri in

tre

C si

C++

int r

a =

0;in

t rb

= 0;

schi

mba

_2(in

t ca,

int c

b){

int t

emp

= ca

;ca

= c

b;cb

= te

mp;

ra =

ca;

rb =

cb;

} // ut

iliza

re;

mai

n()

{ int a

,b;

// va

riabi

le g

loba

lea

= 3;

b =

4;

prin

tf(“a

=%d

b=%

d\n”

, a, b

);sc

him

ba_2

(a, b

);a

= ra

;b

= rb

;pr

intf(

“a=%

d b=

%d\

n”, a

, b);

// re

zulta

t – d

e ce

?

b2)

•cod

ul e

ste

func

tiona

l dar

est

e di

ficil

si “

urat

”•s

patiu

de

mem

orie

supl

imen

tar

•tim

p su

plim

enta

r

18

C1:

Deo

sebi

ri in

tre

C si

C++

c) c

u po

inte

ri:

RE

ME

MB

ER

:

tip *

np;

// np

– p

oint

er c

atre

o v

aria

bila

de

tipul

“tip

”in

t i =

0;

int *

pi;

// pi

– p

oint

er c

atre

o v

aria

bila

de

tip “

int”

pi =

&i;

// &

- op

erat

orul

de

refe

rent

iere

(adr

esar

e)//

i = 3

; *p

i = 3

;//

* - o

pera

toru

l de

dere

fere

ntie

re (i

ndir

ecta

re)

// *

si &

- op

erat

ori i

nver

seT

1 x;

T2

*py;

x =

*(&

x);

py =

&(*

py);

19

C1:

Deo

sebi

ri in

tre

C si

C++

schi

mba

_3(in

t *pa

, int

*pb

){

int t

emp;

tem

p =

*pa;

*pa

= *p

b;*p

b =

tem

p;} //

utili

zare

;in

t a,b

;//

varia

bile

glo

bale

a =

3; b

= 4

;pr

intf(

“a=%

d b=

%d\

n”, a

, b);

schi

mba

_3(&

a, &

b);

prin

tf(“a

=%d

b=%

d\n”

, a, b

);//

rezu

ltat?

– d

e ce

?

•cod

ul e

ste

func

tiona

l est

e va

rian

ta “

clas

ica”

•nec

esita

ate

ntie

spor

ita d

eoar

ece

eror

i de

edita

re g

ener

eaza

ero

rilo

gice

gre

u de

det

ecta

t.

20

C1:

Deo

sebi

ri in

tre

C si

C++

d) c

u re

ferin

ta:

&x

– re

ferin

ta c

atre

o v

aria

bila

x (u

n no

u tip

de

date

)

schi

mba

_4(in

t &ra

, int

&rb

){

int t

emp

= ra

;ra

= rb

;rb

= te

mp;

} // ut

iliza

re;

if (a

> b

) sch

imba

_4(a

, b);

int i

nt_v

al =

3;

int &

ref =

int_

val;

int_

val+

+;//

ref+

+; -

com

pila

toru

l fac

e in

dire

ctar

ea

Alt

exem

plu:

21

C1:

Deo

sebi

ri in

tre

C si

C++

// cu

poi

nter

void

maj

orea

za(in

t *va

l){

*val

+=

5;} //

utili

zare

mai

n()

{in

t x =

0;

//……

……

.M

ajor

eaza

(&x)

;//

adre

sa lu

i x tr

imis

a ca

arg

umen

t//…

……

……

} // cu

refe

rinta

void

maj

orea

za(in

t &va

l){

val +

= 5;

} // ut

iliza

rem

ain(

){

int x

= 0

;//…

……

….

maj

orea

za(x

);//

o re

ferin

ta a

lui x

est

e tri

mis

a ca

arg

umen

t//…

……

……

}

Alt

exem

plu

(fun

ctie

car

e m

ajor

eaza

cu

o va

loar

e o

vari

abila

):

22

C1:

Deo

sebi

ri in

tre

C si

C++

•tipu

l ref

erin

ta e

ste

folo

sit c

a pa

ram

etru

form

al in

inte

rior

ul fu

nctii

lor;

•est

e po

sibi

la d

ecla

rare

a un

or p

aram

etri

tip

refe

rint

a si

in e

xter

ioru

l fin

ctiil

or d

ar n

uex

ista

mot

iv p

entr

u ac

east

a;•o

func

tie n

u po

ate

retu

rna

un p

oint

er la

o v

aria

bila

loca

la (d

e ce

?)•to

t asa

nu

poat

e re

turn

a o

refe

rint

a la

o v

aria

bila

loca

la;

Exem

plu

(inco

rect

):

stru

ct c

mpl

x{

float

re, i

m;

} cmpl

x &

add

x(cm

plx

&c1

, cm

plx

&c2

){

cmpl

x c3

;c3

.re =

c1.

re +

c2.

re;

c3.im

= c

1.im

+ c

2.im

;re

turn

c3;

} // ut

iliza

recm

plx

z =

addx

(a, b

);

Se p

oate

cor

ecta

dac

a se

elim

ina

oper

ator

ul &

=>

o fu

nctie

ce

retu

rnea

za c

a pa

ram

etru

ost

ruct

ura!

!!

23

C1:

Deo

sebi

ri in

tre

C si

C++

•o re

feri

nta

nu p

oate

exi

sta

sing

ura

(int &

ref)

– nu

est

e pe

rmis

a (s

e re

fera

la c

esa

u ci

ne?)

;•s

pre

deos

ebir

e un

poi

nter

(int

*pi

nt) p

oate

exi

sta

sepa

rate

si m

ai m

ult p

oate

fi“r

efol

osit”

;•o

refe

rint

a po

ate

fi va

zuta

ca

un “

alia

s” a

l une

i var

iabi

le –

din

ace

st m

otiv

, nu

poat

e fi

folo

sita

pen

tru

o al

ta v

aria

bila

;•c

and

oper

ator

ul &

est

e ut

iliza

t im

preu

na c

u o

refe

rint

a (a

une

i var

iabi

le,

expr

esia

inse

amna

“ad

resa

var

iabi

lei i

ndic

ate

de re

feri

nta”

;•in

mod

con

trar

, un

poin

ter e

ste

o va

riab

ila d

e si

ne st

atat

oare

, adr

esa

aces

tuia

fiind

dife

rita

de

adre

sa u

nei v

aria

bile

cat

re c

are

aces

ta in

dica

.

24

C1:

Deo

sebi

ri in

tre

C si

C++

9. F

unct

ii ca

par

ti al

e un

or st

ruct

uri:

stru

ct p

erso

ana

{ch

arnu

me[

80],

adre

sa[8

0];

void

prin

t (vo

id);

} // de

finire

func

tie p

rint:

void

per

soan

a::p

rint()

{pr

intf(

“ N

ume:

%

s\n”

,“

Ade

sa:

%s\

n”, n

ume,

adr

esa)

;} //

utili

zare

:pe

rsoa

na p

;st

rcpy

(p.n

ume,

“Io

n”);

strc

py(p

.adr

esa,

“Sp

l. In

dep.

313

”);

p.pr

int()

;

• den

umite

si fu

nctii

mem

bru

sau

met

ode;

•Util

itate

a ac

esto

r fun

ctii

se v

a ve

dea

in c

azul

pro

gram

arii

obie

ctua

le.

25

C1:

Deo

sebi

ri in

tre

C si

C++

10. C

uvan

tul r

ezer

vat “

cons

t”:

int m

ain(

){

int c

onst

//

o co

nsta

nta

de ti

p in

tiv

al =

3;

// in

itial

izat

a cu

val

oare

a 3

ival

=4;

//

atrib

uire

ce

duce

// la

un

mes

aj d

e er

oare

retu

rn (0

);}

• Cuv

antu

l est

e un

mod

ifica

tor d

e tip

– d

ecla

ra o

con

stan

ta d

e un

anu

mit

tip –

spec

ifica

t (in

t, flo

at, d

oubl

e et

c.);

•Mod

ifica

rea

ulte

rioar

a a

valo

rii a

cest

or e

ste

inte

rzis

a.

26

C1:

Deo

sebi

ri in

tre

C si

C++

11. O

bser

vatii

util

e: