You are on page 1of 17

Notas de Aula

C++
Routo Terada
www.ime.usp.br/~rt
Depto. C. da Computação - USP

Objetivos
• Introdução a C++
• POO - Programação Orientada a Objetos
• Inheritance ou herança
• Constructor e desctructor
• Exemplos de programas
Bibliografia:
1. I. Pohl: C++ for C Programmers, 3rd. edition, Addison-Wesley
2. B. Stroustup: The C++ Programming Language, Addison-Wesley
3. Lee and Phillips: The Apprentice C++, ITP Editors
C++ (Routo) 2

1
3HYLWDUHVFUHYHU
VWGDQWHVGHQRPHV 9DLH[LELU$O{0XQGR

C++ (Routo) 3

9DLH[LELU
$O{0XQGR
3HGUR&DEUDO
eDJRUD"

C++ (Routo) 4

2
DQG IDOVH VKRUW
DQGBHT IORDW VLJQHG
DVP IRU VL]HRI
DXWR IULHQG VWDWLF
ELWDQG JRWR VWUXFW 3DODYUDVFKDYHHP&
ELWRU LI VZLWFK
ERRO LQOLQH WHPSODWH
EUHDN LQW WKLV
FDVH ORQJ WKURZ
FDWFK PXWDEOH WUXH
FKDU QDPHVSDFH WU\
FODVV QHZ W\SHGHI
FRPSO QRW W\SHLG
FRQVW QRWBHT W\SHQDPH
FRQWLQXH RSHUDWRU XQLRQ
GHIDXOW RU XQVLJQHG
GHOHWH RUBHT XVLQJ
GR SULYDWH YLUWXDO
GRXEOH SURWHFWHG YRLG
HOVH SXEOLF YRODWLOH
HQXP UHJLVWHU ZFKDUBW
H[SOLFLW UHWXUQ ZKLOH
H[WHUQ [RU
[RUBHT
C++ (Routo) 5

• 8PWLSRDJUHJDGRSHUPLWHXPFRQMXQWRGHGDGRV
FRPSRQHQWHVVHUWUDWDGRFRPRXP~QLFRWLSRGHGDGR
– HQTXDQWRSHUPLWHRDFHVVRDRVFRPSRQHQWHV
LQGLYLGXDLV
• $FRQVWUXomRVWUXFWGH&SHUPLWHDGHILQLomRGHWLSRV
DJUHJDGRV
• 2DFHVVRjVYDULiYHLVPHPEURpDWUDYpVGRRSHUDGRU
SRQWR³´FRPRHP[SHVR
1RPHGHWLSRQRYR



VWUXFW,GHQWLILFDGRUBGHBWLSR9DULiYHLVPHPEUR
^
7LSRYDUBPHPEUR
7LSRYDUBPHPEUR

7LSRYDUBPHPEUR1
`

C++ (Routo) 6

3
3$5$',*0$'(25,(17$d­2$2%-(726322

• C++ é uma linguagem baseada no paradigma de orientação


a objetos - POO (assim como Java)
• Este paradigma tem várias características marcantes:
– Alta reutilização de software (via class)
– Desenvolvimento por aprimoramentos sucessivos
– Construções complexas a partir de construções simples
(via class)
– Chance maior de se ter manutenção simples

C++ (Routo) 7

)XQo}HVVmR
PHPEURVGH
VWUXFWHP&

VFRSH
UHVROXWLRQ
RSHUDWRU

2YHUORDGLQJZSULQW ³SRQWRZ ³ 

9DLH[LELU
SRQWRZ  
SRQWRZ  
SRQWRZGHSRLVGHSOXV  

C++ (Routo) 8

4
6ySRGHVHUXVDGRGHQWURGHVWHVWUXFW

9DLH[LELU
SRQWRZ  
SRQWRZ  
SRQWRZGHSRLVGHSOXV  

C++ (Routo) 9

classes
• 1HFHVVLWDPRVGHXPPHFDQLVPRSDUDGHILQLUWLSRVGHGDGRV
TXH
✔ VHSDUDFODUDPHQWHDLQWHUIDFHGRWLSRGDVXD
LPSOHPHQWDomR VHSDUDWLRQRIFRQFHUQVHLQIRUPDWLRQ
KLGLQJ
✔ SUHYLQH³DEXVR´GRVGHWDOKHVGDLPSOHPHQWDomR
HQFDSVXODWLRQ
✔ SHUPLWHGHILQLomRGHFRPSRUWDPHQWR ,HIXQo}HV 
DVVLPFRPRYDORUHVDEVWUDWRV
✔ SHUPLWHYHULILFDomRGHHUURVGXUDQWHDFRPSLODomR
✔ SHUPLWHGHVHQYROYLPHQWRVHSDUDGRGRVFRPSRQHQWHVGH
WLSRGHGDGRV
• 2PHFDQLVPRGHFODVVHP&SHUPLWHVDWLVID]HUHVWHV
UHTXLVLWRV

C++ (Routo) 10

5
CLASSES

São abstrações de conjuntos de objetos

class automóvel class motocicleta


fábrica fábrica
modelo 9DULiYHLVPHPEUR modelo
ano ano
partida(){ partida(){
.... ....
} }
)XQo}HVPHPEUR
ré(){ vira(){
.... ....
} }
C++ (Routo) 11

CLASSES

São abstrações de conjuntos de objetos

class mamífero class ovíparo


Nome Espécie
Idade 9DULiYHLVPHPEUR Idade
Peso Altura

Nasce(){ Nasce(){
.... ....
} }
)XQo}HVPHPEUR
Cresce(){ Morre(){
.... ....
} }

C++ (Routo) 12

6
,167$1&,$d­2

Class Mamífero
Classificação Nome Instanciação
Idade
CPF
Nasce(){
....
}
Cresce(){
Objeto LU .... Objeto LI
Nome=Lulu } Nome=Lili
Idade=4 Idade=6
Peso=8 Peso=9
Nasce(){ Nasce(){
.... ....
} }
Cresce(){ Cresce(){
.... ....
} }
C++ (Routo) 13

,167$1&,$d­2

Class Pessoa
Classificação Nome Instanciação
Idade
CPF
Nasce(){
....
}
Estuda(){
Objeto ZÉ .... Objeto JOCA
Nome=José } Nome=JoãoCarlos
Idade=41 Idade=61
CPF=388734122 CPF=1233213459
Nasce(){ Nasce(){
.... ....
} }
Estuda(){ Estuda(){
.... ....
} }
C++ (Routo) 14

7
Palavras-chave

• OBJETOS
• CLASSES
• INSTANCIAÇÃO

C++ (Routo) 15

OBJETOS

Um objeto (como LU ou ZÉ) é caracterizado por:

• Uma identificação ( KDQGOH )


• Um estado interno (variáveis-membro)
• Um comportamento (funções-membro)

C++ (Routo) 16

8
main MODELO
objeto B de
interação
entre
objetos
objeto A

objeto C

“perguntas” e “respostas”
“mensagens” entre objetos
“estímulo” e “resposta”

C++ (Routo) 17

ponto4.cpp

FODVV

9DLH[LELU
SRQWRZ  
SRQWRZ  
SRQWRZGHSRLVGHSOXV  

C++ (Routo) 18

9
C++ (Routo) 19

• 8PDGHILQLomRGHfodvvGHILQHRVGHWDOKHVH[DWRVHP&GRTXHDLQWHUIDFHFRP
DFODVVHpHGHVHPSHQKDGRLVSDSpLV
– SDSHOGHIDFLOLWDUYHULILFDomRGHHUURVHPWHPSRGHFRPSLODomR
– SDSHOGHGRFXPHQWDomRGHWDOKHVH[DWRVGHFRPRXVDUXPDFODVVH
• 'HILQLo}HVGHfodvvSRVVXHPDHVWUXWXUDJHUDOVHJXLQWH
FODVV ,G7LSR
{
SXEOLF 3DUWHS~EOLFDGHXPDFODVVH
GHILQLomRGLVSRQtYHODXPXVXiULR
,QWHUIDFH³FRQVWUXFWRU´
,G7LSR 
,QWHUIDFHVGHIXQomRPHPEUR
7LSR5HVXOWDGR)XQomR0HPEUR  
,QWHUIDFHVGHRSHUDGRUPHPEUR
7LSR5HVXOWDGRRSHUDWRU 7LSRODGRGLUHLWR 
SULYDWH: 3DUWHSULYDGDGHXPDFODVVH
'HFODUDo}HVGHIGHWLSRH
LQWHUIDFHVGHIXQomR
1­2GLVSRQtYHOSDUDXPXVXiULR
};

C++ (Routo) 20

10
/LQJXDJHQV2ULHQWDGDVD2EMHWRV

Existem várias linguagens orientadas a objeto, algumas com


características bem distintas. Algumas mais familiares são

• C++
• Java
• Object Pascal ( Delphi )

Outras menos familiares:


• Eiffel
• SmallTalk

C++ (Routo) 21

$SDODYUD³IULHQG´
LQGLFDTXHDSHVDUGH
VHU³SXEOLF´R
RSHUDGRUWHPDFHVVR
jSDUWH³SULYDWH´

([LEH
L
L
L 

C++ (Routo) 22

11
&RQVWUXFWRU
H
GHVWUXFWRU

&RQVWUXFWRUpLQYRFDGR
\  ] 

'HVWUXFWRUpLQYRFDGRTGR
YDUGHL[DGHH[LVWLU RX
FRP³GHOHWH [´

C++ (Routo) 23

2YHUORDGLQJGHSULQW

C++ (Routo) 24

12
2YHUORDGLQJGH

([LEH
[  L
\  L
]  L
C++ (Routo) 25

C++
super e sub class

Super Class

derived class

Sub Class 1 Sub Class 1

C++ (Routo) 26

13
empresa
Exemplo de
super e sub class

divisão_1

derived class

diretoria executiva diretoria financeira diretoria marketing

vantagens:
1. objetos do tipo GLUHWRULD usam funções já definidas para
GLYLVmRB;
2. herarquia reflete a relação dos objetos no domínio do problema
C++ (Routo) 27

pessoa
Exemplo de
super e sub class

estudante

derived class

estudante_pós estudante_graduação estudante_secund

vantagens:
1. objetos do tipo HVWXGDQWHBSyV usam funções já definidas para
HVWXGDQWH;
2. herarquia reflete a relação dos objetos no domínio do problema
C++ (Routo) 28

14
,QKHULWDQFHRXKHUDQoD
FRPSULYDWHPHPEHUV
LQFOXGHLRVWUHDP!HVWXGDQWHFSS
HQXPDQR^SULPHLURVHJXQGRWHUFHLURTXDUWRSyVJUD`
HQXPEROVD^&13T)$3(63&$3(6RXWUD`
FODVVHVWXGDQWH^VXSHUFODVV
SXEOLFFRQVWUXFWRUGHHVWXGDQWH
HVWXGDQWH FKDU HQPLQWHLGHQWGRXEOHHQWDQRH[ 
YRLGSULQW FRQVW
SULYDWH
LQWHLGHQWBHVWXGDQWH3
GRXEOHHQRWD3
DQRHD3
FKDUHQRPH3>@
` VXEFODVVHKHUDQoDGHILQLGDSRU

FODVVHVWXGDQWHBSyVSXEOLFHVWXGDQWH^VXEFODVV
SXEOLFFRQVWUXFWRUGHHVWXGDQWHBSyV
HVWXGDQWHBSyV FKDU HQPLQWHLGHQWGRXEOHHQW
DQRH[EROVDHSEOVFKDU HSGSWFKDU HSWHV 
YRLGSULQW FRQVW
SULYDWH
EROVDHSE3
FKDUHSGHSWR3>@ YDULiYHLVDGLFLRQDLVVyGDVXEFODVVH
FKDUHSWHVH3>@
`

C++ (Routo) 29

HVWXGDQWHpVXSHUFODVVH ,QKHULWDQFHRXKHUDQoD
FODVVHVWXGDQWH^HVWXGDQWHK
FRPSURWHFWHGPHPEHUV
SXEOLF
HQXPDQR^SULPHLURVHJXQGRWHUFHLURTXDUWRSyVJUD`
HVWXGDQWH FKDU HQPLQWHLGHQWGRXEOHHQWDQRH[ 
YRLGSULQW FRQVW
SURWHFWHG
LQWHLGHQWBHVWXGDQWH3
GRXEOHHQRWD3
DQRHD3
FKDUHQRPH3>@
`FRQVWUXFWRUGHHVWXGDQWH
HVWXGDQWHHVWXGDQWH FKDU HQPLQWHLGHQWGRXEOHHQW
DQRH[ HLGHQWBHVWXGDQWH3 HLGHQW HQRWD3 HQW 
HD3 H[
^VWUFS\ HQRPH3HQP `
YRLGHVWXGDQWHSULQW FRQVW
^FRXWHQRPH3HLGHQWBHVWXGDQWH3
HD3HQRWD3HQGO`

SURWHFWHG: acessível às sub-classes; exceto isso, é como ser private


C++ (Routo) 30

15
HVWXGDQWHBSyVpVXEFODVVHGHHVWXGDQWH

FODVVHVWXGDQWHBSyVSXEOLFHVWXGDQWH^
SXEOLF
HQXPEROVD^)$3(63&13T&$3(6RXWUD`
HVWXGDQWHBSyV FKDU HQPLQWHLGHQWGRXEOHHQWDQRH[
EROVDHSEOVFKDU HSGSWFKDU HSWHV 
YRLGSULQW FRQVW
SURWHFWHG
EROVD HSE3
FKDUHSGHSWR3>@
FKDUHSWHVH3>@
`
HVWXGDQWHBSyVHVWXGDQWHBSyV FKDU HQPLQWHLGHQWGRXEOHHQWDQRH[EROVDHSEOV
FKDU HSGSWFKDU HSWHV HVWXGDQWH HQPHLGHQWHQWH[ HSE3 HSEOV
^
VWUFS\ HSGHSWR3HSGSW 
VWUFS\ HSWHVH3HSWHV 
`
YRLGHVWXGDQWHBSyVSULQW FRQVW
^
HVWXGDQWHSULQW H[LEHLQIRGDVXSHUFODVV
FRXWHSGHSWR3HSE3 ?Q
HSWHVH3HQGO
`

C++ (Routo) 31

LQFOXGHLRVWUHDP! PDLQ com inheritance


LQFOXGHVWULQJ!
7HVWHGDVFODVVHVHVWXGDQWHHHVWXGDQWHBSyV
LQFOXGHVWXGHQWKLQFOXGHGDVGHFODUDo}HVGHVXSHUHVXEFODVV
LQWPDLQ ^
HVWXGDQWHH6LOYD 0DULD6LOYDHVWXGDQWHSULPHLUR 
 SH6LOYD  H6LOYDSRLQWHU
HVWXGDQWHBSyVHS3HUHLUD 0iULR3HUHLUD
HVWXGDQWHSyVJUDHVWXGDQWHBSyV)$3(63&RPSXWDomR
DQRAAEROVDAAGHSWRAA
,QWHOLJrQFLDQR&RPSXWDGRU 
WHVHAA
 SHS3HUHLUDSRLQWHU
SH6LOYD!SULQW HVWXGDQWHSULQW
SH6LOYD SHS3HUHLUD  HS3HUHLUD
SHS3HUHLUD!SULQW HVWXGDQWHBSyVSULQW
SH6LOYD!SULQW HVWXGDQWHSULQW
`

exibe: bolsa FAPESP

C++ (Routo) 32

16
H[LEH
0'&  

C++ (Routo) 33

H[LEH


C++ (Routo) 34

17

You might also like