Академический Документы
Профессиональный Документы
Культура Документы
Objetivos
Apresentar as caractersticas, objetivos, vantagens e desvantagens da linguagem C++. Apresentar como os mecanismos da orientao a objetos so implementados no C++. Capacitar o aluno para o desenvolvimento produtivo de sistemas modernos utilizando o C++. ornecer uma base preparat!ria para a realizao do curso sobre "t# $ %&evelop.
Sandro Santos Andrade
Roteiro
'ntroduo. Criando e (sando Objetos. Construtores )*sicos do C+++,. Abstrao de &ados. Aspectos da Orientao a Objetos em C++. )reve 'ntroduo - Standard Template Library +S./,. )reve 'ntroduo ao "t#.
'ntroduo
Considera0es 'niciais
oco nos conceitos e no em detal2es t3cnicos. &esenvolva os estilos de programao e tcnicas pr!prios do C++. O aprendizado 3 gradual. 4o 3 necess*rio aprender C antes. 5rati6ue +envolva7se em projetos j* e8istentes ou inicie seus pr!prios projetos,.
Notas 9ist!ricas
O C++ :oi inspirado nas linguagens C, )C5/, Simula7;<, Ada e Algol;=. O termo C++ surgiu em >?=@ +Rick Mascitti,. Am >?=< comeam os primeiros es:oros para padronizao. O padro internacionalmente aprovado surgiu em >??=.
Usos do C++
Am aplica0es 6ue re6uerem e:iciBncia em bai8o nvel. A8C drivers de dispositivo. Am aplica0es 6ue re6uerem manutenibilidade e :acilidade de e8tenso e testes. A8C sistemas de in:ormao.
CURIOSIDADEC o controle da central de tele:onia dos A(A 3 :eito em C++ e todas as c2amadas D=DD so roteadas por um programa em C++.
Usos do C++
O C++ 3C
Simples o su:iciente para o ensino de conceitos b*sicos. Eealstico, e:iciente e :le8vel o su:iciente para demandas de projetos. &isponvel para uso em diversos ambientes de desenvolvimento e e8ecuo. Completa o su:iciente para ser utilizada no ensino de conceitos e t3cnicas avanadas. Comercial o su:iciente para ser utilizada em projetos no7acadBmicos.
Sandro Santos Andrade
O 5rocesso de Compilao
Pr-Processador Compilador Linker
5r37processadorC realiza processamentos te8tuais indicados pelas diretivas de compilao +e8C Finclude, Fde:ine,. CompiladorC realiza a trans:ormao do c!digo7 :onte +.cpp, em c!digo7objeto +.o,. LinkerC realiza a combinao de diversos c!digos7objeto em um programa e8ecut*vel.
Sandro Santos Andrade
O 5rocesso de Compilao
Compilao separadaC
&eclaraoC introduz um nome +identi:icador, ao compilador. &e:inioC cria uma vari*vel ou :uno, alocando espao para armazenamento. A8emplosC
Declarao Definio
O 5rocesso de Compilao
Compilao separadaC
Gais e8emplosC
)) Declaration * definition e%amples e%tern int i$ e%tern float f !float#$ float .$ float f !float a# & return a / '0$ ( int i$ int , !int %# & return % / $ ( )) Declaration +it,out definition )) -unction declaration )) Declaration * definition )) Definition
O 5rocesso de Compilao
Compilao separadaC
(sando bibliotecasC
i, 'nclua os headers, ii, use as :un0es e vari*veis e iii, :aa a link7edio da biblioteca no e8ecut*vel.
Sandro Santos Andrade
)) Sa:ing ;ello +it, C// !;ello"cpp# 1include 2iostream3 using namespace std$ )) Stream declarations
int main !# & cout 22 <;ello" =orld> I am < 22 ? 22 < @oda:>< 22 endl$ (
)) Sa:ing ;ello +it, C// !;ello"cpp# 1include 2iostream3 using namespace std$ )) Stream declarations
int main !# & cout 22 <;ello" =orld> I am < 22 ? 22 < @oda:>< 22 endl$ (
)) Sa:ing ;ello +it, C// !;ello"cpp# 1include 2iostream3 using namespace std$ )) Stream declarations
int main !# & cout 22 <;ello" =orld> I am < 22 ? 22 < @oda:>< 22 endl$ (
)) Sa:ing ;ello +it, C// !;ello"cpp# 1include 2iostream3 using namespace std$ )) Stream declarations
int main !# & cout 22 <;ello" =orld> I am < 22 ? 22 < @oda:>< 22 endl$ (
UtiliBa o o.Aeto cout para e%i.it um array de caracteres na tela
)) Sa:ing ;ello +it, C// !;ello"cpp# 1include 2iostream3 using namespace std$ )) Stream declarations
int main !# & cout 22 <;ello" =orld> I am < 22 ? 22 < @oda:>< 22 endl$ (
UtiliBa o o.Aeto cout para e%i.it um array de caracteres na tela
5ara compilarC
g// -o ;ello ;ello'cpp
)) Empt: strings )) InitialiBed )) Also initialiBed )) Assigning to a string )) Com.ining strings )) Appending to a string
)) Open for reading )) Open for +riting )) Discards ne+line c,ar )) ''' must add it .acK
Controlando a e8ecuoC
O C++ possui todos os comandos de controle de e8ecuo do CC if-else, while, do-while, for, switch. O C++ de:ine um tipo +bool, e constantes +true e false, para valores booleanos. 4o C, o valor D 3 :also e 6ual6uer coisa di:erente de D 3 verdadeiro. A.A4HIOC compara0es so realizadas com o operador JJ. Construtores para loops podem ser alterados pelos comandos break e continue.
OperadoresC
Auto incremento e decrementoC ++, 77 +pr3 e p!s :i8ados,. .ipos primitivosC char, int, float, double e bool. Aspeci:icadoresC long, short, signed e unsigned. So criados com o operador S. O endereo de uma vari*vel ou :uno pode ser obtido com o operador K.
Sandro Santos Andrade
.ipos de dadosC
5onteirosC
A8emplo de ponteirosC
int Sip$ int Sipa" ip." ipc$ int Sipa" Sip." Sipc$ int a M GJ$ ipa M *a$ Sipa M 00$ 9oid f !intS p# & cout 22 <p M < 22 p 22 endl$ cout 22 <Sp M < 22 Sp 22 endl$ Sp M E$ cout 22 <p M < 22 p 22 endl$ ( int main !# & int % M GJ$ cout 22 <% M < 22 % 22 endl$ cout 22 <*% M < 22 *% 22 endl$ f !*%#$ cout 22 <% M < 22 % 22 endl$ (
Ee:erBncias no C++C
orma adicional de passar um endereo para uma :uno +passagem por re:erBncia,. Lalores so passados para :un0es 6ue usam re:erBncias sem a necessidade do operador K. Ee:erBncias so utilizadas como vari*veis comuns, sem a necessidade do operador S.
A8emplo de re:erBnciasC
1include 2iostream3 using namespace std$ 9oid f !int* r# & cout 22 <r M < 22 r 22 endl$ cout 22 <*r M < 22 *r 22 endl$ r M E$ cout 22 <r M < 22 r 22 endl$ ( int main !# & int % M GJ$ cou t 22 <% M < 22 % 22 endl$ cout 22 <*% M < 22 *% 22 endl$ f !%#$ ( cout 22 <% M < 22 % 22 endl$
AscoposC
Eegras de escopo in:ormam onde uma vari*vel 3 v*lida, onde ela 3 criada e onde 3 destruda. (m escopo de uma vari*vel se estende do ponto onde ela :oi de:inida at3 o M +:ec2a7c2aves, do par de c2aves mais pr!8imo da vari*vel.
A8emplo de escoposC
)) ;o+ 9aria.les are scoped int main !# & int scp $ )) scp 9isi.le ,ere & )) scp still 9isi.le ,ere int scpI$ )) scpI 9isi.le ,ere & )) scp * scpI still 9isi.le ,ere int scpF$ )) scp " scpI * scpF 9isi.le ,ere ( )) 2-- scpF destro:ed ,ere )) scpF not a9aila.le ,ere )) scp * scpI still 9isi.le ,ere ( )) 2-- scpI destro:ed ,ere )) scpF * scpI not a9aila.le ,ere )) scp still 9isi.le ,ere ( )) 2-- scp destro:ed ,ere
NlobaisC disponveis em todas as partes do programa. /ocaisC tamb3m c2amadas autom*ticas +a palavra reservada auto re:ora o :ato, mas no 3 necess*ria,. EegisterC torna o acesso - vari*vel o mais r*pido possvel +palavra reservada register,. Ast*ticas +caso >,C vari*veis 6ue no so destrudas no t3rmino do escopo +palavra reservada static,.
Sandro Santos Andrade
Ast*ticas +caso O,C vari*veis ou :un0es globais no disponveis :ora do ar6uivo onde :oram de:inidas. A8ternasC vari*veis e :un0es 6ue e8istem, mas sero de:inidas em outro ar6uivo ou mais abai8o no c!digo +palavra reservada extern,. Lol*teisC vari*veis 6ue no podem ser so:rer otimiza0es baseadas na sua PestabilidadeQ +palavra reservada volatile,.
Constantes e literaisC
&ecimaisC #<, D, >>D>. OctaisC D>< +>S na base >D,. 9e8adecimaisC D8>:e +S>D na base OD,. 5onto :lutuanteC >e#, >.DDD>, #<.D, D.D, 7>.>S?e7<<, O.< , O.<:, @.>#>S>;/, @.>#>S>;l. CaracterC TAT, ToT, TUnT, TUtT, TUUT, TUrT, TUTT, TUQT, TU><T, TUD8::T.
OperadoresC
AtribuioC J. Operadores matem*ticosC +, 7, $ +truncada se entre inteiros,, V, W, +J, 7J, $J, VJ. Operadores relacionaisC X, Y, XJ, YJ, JJ, ZJ. Operadores l!gicosC KK, [[. Operadores bit7a7bitC K, [, \, ], KJ, [J, \J, YY, XX, YYJ, XXJ. Operadores un*riosC Z, 7, +, ++, 77, K +endereo7de,, V e 7Y +dere:erBncia,, cast, new e delete.
Sandro Santos Andrade
OperadoresC
Operador , +vrgula,C separa e8press0es e produz o valor da ^ltima utilizada. Operador sizeofC in:orma o taman2o de mem!ria alocado para o item. OutrosC typedef, struct, enum, union, arrays, ponteiros para :uno.
Abstrao de &ados
Abstrao de &ados
Abstrao de &ados
O endereo da estrutura deve ser in:ormado em cada uso de :un0es de biblioteca. O mecanismo da biblioteca se mistura ao signi:icado das c2amadas -s :un0es. Con:litos de nomes de :un0es. 5or6ue no tornar essas :un0es membros de uma struct 1
Como remediar 1
Abstrao de &ados
Abstrao de &ados
Abstrao de &ados
4o C++, structs podem conter :un0es, encapsulando caracterstica e comportamento. O 6ue 3 um objeto 1
(ma entidade limitada e independente, capaz de recordar e atuar. (m lugar onde dados podem ser armazenados e 6ue conten2a opera0es 6ue podem ser realizadas nesses dados. /inguagens Orientadas a Objetos _ )aseadas em Objetos.
Sandro Santos Andrade
Abstrao de &ados
eaderC in:ormam o 6uB a struct$classe :az. 4ecess*rio na compilao. &e implementaoC in:orman como a struct$classe :az o 6ue ela se prop0e a :azer. 4ecess*rio na link7 edio. Gudanas na implementao no re6uerem a recompilao do sistema.
Sandro Santos Andrade
Abstrao de &ados
Abstrao de &ados
Am 6ual6uer relacionamento 3 importante ter limites 6ue so respeitados por todos os envolvidos. Ao criar uma biblioteca estabelece7se um relacionamento com o programador7cliente 6ue utiliza a biblioteca.
5ublicC todas as declara0es dos membros 6ue seguem esto disponveis para todos. 5rivateC signi:ica 6ue ningu3m pode acessar o membro, e8ceto o criador do tipo, dentro de :un0es membros desse tipo. 5rotectedC atuam como o private, por3m concedendo acesso a structs derivadas.
Aspeci:icador friendC
ClassesC
5alavra c2ave utilizada no Simula7;< para indicar um novo tipo de dado. So idBnticas -s struct, com a e8ceo de 6ue membros de classes por default so privados, ao passo 6ue em structs eles so p^blicos. ` um conceito :undamental da orientao a objetos.
'nicializao e limpezaC
Gel2oram a robustez de uma classe. Guitos bugs de programas em C so conse6uBncia da :alta de inicializao ou limpeza de vari*veis. 4o se pode esperar 6ue o programador se lembre de e8ecutar m3todos de inicializao. O construtor 3 uma :uno7membro automaticamente invocada no momento da criao do objeto. Construtores tBm o mesmo nome da classe.
Sandro Santos Andrade
O m3todo construtorC
Considera0esC
Construtores e destrutores so tipos especiais de :un0esC eles no tBm tipo de retorno. &estrutores tBm o mesmo nome da classe, por3m so iniciados com o caracter [. &estrutores nunca tBm argumentos.
O m3todo destrutorC
int main!# & cout 22 <.efore opening .race< 22 endl$ & @ree t ! I#$ cout 22 <after @ree creation< 22 endl$ t'printsiBe !#$ t'gro+ !G#$ cout 22 <.efore closing .race< 22 endl$ ( cout 22 <after closing .race< 22 endl$ (
'nicializao agregadaC
int aOEP M & " I" F" G" E ($ int aOEP M & " I" F" G" E" \ ($ int .O\P M &0($ int cOP M & " I" F" G ($ )) InicialiBao agregada )) Erro )) o com Bero e demais com 0 )) Auto contagem
for!int i M 0$ i 2 siBeof c ) siBeof Sc$ i//# )) Desco.erta do taman,o do array cOiP//$ class Z & int i" A$ pu.licD Z!int ii" int AA#$ 9oid print!#$ ($ Z BBOP M & Z! "I#" Z!F"G#" Z!E"\#" Z!J"?# ($ )) Definio da classe Z
Construtor defaultC
` a6uele 6ue pode ser c2amado sem argumentos. Se nen2um construtor 3 especi:icado na classe o compilador ir* criar o construtor default vazio.
struct Y & float f$ int i$ Y!int a#$ ($ Y :IOIP M & Y! # ($ Y :FOJP$ Y :G$
Sobrecarga de :unoC
(ma das caractersticas importantes em uma linguagem de programao 3 o uso conveniente de nomes. Gotivao para sobrecargaC
Sobrecarga de :unoC
Argumentos defaultC
Automaticamente enviado pelo compilador caso ele no esteja presenta na c2amada - :uno. Eeduz a implementao de novas sobrecargas.
A8emplo de sobrecargaC
class Stas, & int siBe$ )) SiBe of eac, space int 7uantit:$ )) Uum.er of storage spaces int ne%t$ )) Ue%t empt: space unsigned c,arS storage$ 9oid inflate!int increase#$ pu.licD Stas, !int siBe#$ )) Zero 7uantit: Stas, !int siBe" int initVuantit:#$ ( Stas,DDStas, !int sB# & siBe M sB$ 7uantit: M 0$ ( Stas,DDStas, !int sB" int initVuantit:# & Stas, !sB#$ inflate!initVuantit:#$ ( ne%t M 0$ storage M 0$
)) Default argument
Considera0esC
4o pode e8istir um argumento default seguido de um argumento no default. A partir do primeiro argumento default todos os demais tamb3m devem ser default. O valor default dos argumento s! aparecem na declarao +ar6uivos header,.
4o C++, argumentos devem ser pre:erencialmente declarados como re:erBncias constantes. Objetos tempor*rios so sempre re:erBncias constantes.
class X &($ X f !# & return X!#$ ( 9oid g !X*# &( 9oid gI !const X*# &( )) Return .: 9alue )) Pass .: non-const reference )) Pass .: const reference
int main !# & )) ErrorD const temporar: created .: f!# g !f!##$ )) O^D gI taKes a const reference gI!f!##$ (
Sandro Santos Andrade
Constantes no7est*ticas dentro de classes so constantes durante o ciclo de vida de cada objeto. Objetos di:erentes podem conter di:erentes valores para a constantes. Assas constantes no podem ser inicializadas dentro da classe. Assas constantes tamb3m no podem ser inicializadas dentro do m3todo construtor, pois elas devem ser inicializadas na de:inio.
Sandro Santos Andrade
1include 2iostream3 using namespace std$ class Tunc, & enum & siBe M 000 ($ int i OsiBeP$ ($ int main !# & cout 22 <siBeof !Tunc,# M < 22 siBeof !Tunc,# 22 <" siBeof !iO 000P# M < 22 siBeof !intO 000P# 22 endl$ (
Objetos constantesC
'mpedir dados p^blicos no 3 su:iciente. EespostaC permitindo somente a invocao de :un0es7membro constantes.
Sandro Santos Andrade
un0es7membro constantesC
So a6uelas 6ue no alteram o estado do objeto e possuem a palavra reservada const na sua assinatura. un0es sem a palavra reservada const so consideradas potenciais alteradoras do estado do objeto. .entar invocar :un0es no7const a partir de um objeto const resulta em um erro. .entar alterar o estado do objeto a partir de uma :uno const resulta em um erro.
Sandro Santos Andrade
Se a :uno f!" tentar modi:icar i ou tentar c2amar uma :uno no7const ser* gerado um erro.
Sandro Santos Andrade
)) Ar7ui9o Rectangle', class Rectangle & int +idt," ,eig,t$ pu.licD Rectangle !int + M 0" int , M 0#$ int get=idt, !# const$ 9oid set=idt, !int +#$ int get;eig,t !# const$ 9oid set;eig,t !int ,#$ ($
#amespacesC
&etal2esC
#amespaces podem ser anin2ados, no 3 necess*rio R ao :inal, namespaces podem ser PcontinuadosQ.
Sandro Santos Andrade
)) UO@ a redefinition>
(sando namespacesC
namespace X & class Y & static int i$ pu.licD 9oid f !#$ ($ class Z$ 9oid func !#$ ( int XDDYDDi M H$ class XDDZ & int u" 9" +$ pu.licD Z !int i#$ int g !#$ ($
XDDZDDZ !int i# & u M 9 M + M i$ ( int XDDZDDg !# & return u M 9 M + M 0$ ( 9oid XDDfunc !# & XDDZ a ! #$ a'g !#$ (
O operador usingC
1ifndef UACESPACECA@;N; 1define UACESPACECA@;N; 1include <UamespaceInt',< namespace Cat, & using namespace Int$ Integer a" .$ Integer di9ide !Integer" Integer#$ )) ''' ( 1endif )) UACESPACECA@;N; 1include <UamespaceInt',< 9oid arit,metic !# & using namespace Int$ Integer %$ %'setSign !positi9e#$ using Cat,DDdi9ide$ Integer i M di9ide !G" I#$ ( int main !# & (
5assar um parametro por valor re6uer a invocao de um construtor e um destrutor. 5assar um parametro por re:erBncia constante re6uer apenas copiar um endereo. Se uma :uno no modi:ica um argumento, este deve ser passado como re:erBncia constante.
Ee:erBncias constantesC
Ou seja, para tipos primitivos, estes no sero modi:icados e para objetos, m3todos no7const no sero invocados nem atributos p^blicos modi:icados.
Sandro Santos Andrade
"uando um objeto 3 passado como valor um novo objeto 3 criado a partir do parametro. 'sso tamb3m acontece ao retornar um objeto em uma :uno. 5or default, o compilador realiza essa criao atrav3s de c!pias bit a bit, sem a invocao do destrutor. 5ara tipos primitivos isso no 3 um problema, mas pode ser prejudicial para objetos com atributos est*ticos ou ponteiros como atributos.
Sandro Santos Andrade
elizmente, o programador pode especi:icar a :uno a ser c2amada sempre 6ue se precisa criar um objeto a partir de outro do mesmo tipo. Assa :uno 3 o copy constructor. O copy constructor recebe como parametro uma re:erBncia constante para um objeto da mesma classe na 6ual ele est* presente.
# ;o+Can:I!# I# ,D o.AectCount M F# Entering f!# G# ;o+Can:I!const ;o+Can:I*# E# , cop:D o.AectCount M I \# % argument inside f!# J# , cop:D o.AectCount M I ?# Returning from f!# H# ;o+Can:I!const ;o+Can:I*# 0# , cop: cop:D o.AectCount M F
Caso ele no seja implementado, o copy constructor default ir* realizar c!pia bit a bit +atributo a atributo,. Caso o objeto conten2a outros objetos ser* utilizado o copy constructor de cada objeto +6uando disponvel, ou a c!pia bit a bit +caso contr*rio,. 5ode7se impedir a passagem de objetos por valor declarando seu copy constructor como privado.
Sobrecarga de operadoresC
Eepresentam uma outra :orma de realizar invoca0es :un0es. 5or3m, os argumentos no esto entre parBnteses e sim pr!8imos a operadores. O compilador saber* 6ual :uno invocar a depender do operador e parametro utilizados. O nome da :uno a ser c2amada 3 :ormado pela palavra reservada operator seguida do operador a ser sobrecarregado. &evem ser criados somente 6uando o seu uso :avorecer a escrita e legibilidade do c!digo.
Sandro Santos Andrade
int main !# & cout 22 <.uilt-in t:pesD< 22 endl$ int i M " A M I" K M F$ K /M i / A$ cout 22 <user-defined t:pesD< 22 endl$ Integer ii ! #" AA !I#" KK !F#$ KK /M ii / AA$ (
Operadores no7membrosC
Algumas vezes o operando do lado es6uerdo deve ser um objeto de outra classe +e8emploC XX e YY,. 4o podemos alterar as classes ostream e istream. SoluoC sobrecarga de operadores como :un0es friend.
class IntArra: & enum & sB M E ($ int iOsBP$ pu.licD IntArra: !# & memset !i" 0" sBSsiBeof !Si##$ ( int* operatorOP !int %# & re7uire !% 3M 0 ** % 2 sB" <IntArra:DDoperator OP out of range<#$ return iO%P$ ( friend ostream* operator22 !ostream* os" const IntArra:* ia#$ friend istream* operator33 !istream* is" IntArra:* ia#$ ($
C:@:pe .$ C:@:pe a M .$ a M .$
` sempre mel2or escrever c!digo 6ue usa o copy constructor ao inv3s do operator&, pois evita7se uma c2amada a :uno.
Sandro Santos Andrade
class `alue & int a" .$ float c$ pu.licD `alue !int aa M 0" int .. M 0" float cc M 0'0# D a !aa#" . !..#" c !cc# & ( `alue* operatorM !const `alue* r9# & a M r9'a$ . M r9'.$ c M r9'c$ return St,is$ ( friend ostream* operator22 !ostream* os" const `alue* r9# & return os 22 <a M < 22 r9'a 22 <" . M < 22 r9'. 22 <" c M < 22 r9'c$ ( ($
int main !# & `alue a" . ! " I" F'F#$ cout 22 <aD < 22 a 22 endl$ cout 22 <.D < 22 . 22 endl$ a M .$ cout 22 <a after assignmentD < 22 a 22 endl$ (
So :re6uentemente utilizados para realizar deep copies em classes 6ue cont3m ponteiros como atributos. .oda classe possui um operator& 6ue realiza a atribuio bit a bit.
9erana e composioC
1ifndef USE-UQN; 1define USE-UQN; class X & int i$ pu.licD X !# & i M 0$ ( 9oid set !int ii# & i M ii$ ( int read !# const & return i$ ( int permute !# & return i M i S GJ$ ( ($ 1endif )) USE-UQN; )) 1include <Useful',< class Y & int i$ pu.licD X %$ )) Em.edded o.Aect Y!# & i M 0$ ( ($ class Y D pu.lic X & int i$ )) Different from XRs i pu.licD Y!# & i M 0$ ( int c,ange!# & i M permute!#$ )) Different name call return i$ ( 9oid set!int ii# & i M ii$ XDDset!ii#$ )) Same-name function call ( ($ int main!# & Y D$ D'c,ange!#$ D'read!#$ D'permute!#$ D'set! I#$ (
9eranaC
&urante a 2erana, por default tudo se trans:orma em private. A 2erana p^blica +$ public ', in:orma 6ue os membros p^blicos devero permanecer p^blicos na classe derivada. "uando um objeto 3 criado, os construtores default de todos os seus sub7objetos so c2amados. Como, entretanto, invocar outros construtores dos sub7objetos 1
Sandro Santos Andrade
ComposioC
` recomendado 6ue se utilize esse estilo de inicializao tamb3m para tipos primitivos.
9erana e protectedC
class Tase & int i$ protectedD int read !# const & return i$ ( 9oid set !int ii# & i M ii$ ( pu.licD Tase !int ii M 0# D i !ii# &( int 9alue !int m# const & return mSi$ ( ($ class Deri9ed D pu.lic Tase & int A$ pu.licD Deri9ed !int AA M 0# D A !AA# &( 9oid c,ange !int %# & set!%#$ ( ($ int main!# & Deri9ed d$ d'c,ange ! 0#$ (
)) In,eritance * upcasting 1include 2iostream3 using namespace std$ enum note & middleC" Cs,arp" Eflat ($ )) Etc' class Instrument & pu.licD 9oid pla: !note# const & cout 22 <InstrumentDDpla:< 22 endl$ ( ($
class =ind D pu.lic Instrument & pu.licD )) Redefine interface function 9oid pla: !note# const & cout 22 <=indDDpla:< 22 endl$ ( ($ 9oid tune !Instrument* i# & )) ''' i'pla: !middleC#$ ( int main !# & =ind flute$ tune !flute#$ (
)) Upcasting
)) In,eritance * upcasting 1include 2iostream3 using namespace std$ enum note & middleC" Cs,arp" Eflat ($ )) Etc'
a O
class Instrument & pu.licD 9oid pla: !note# const & cout 22 <InstrumentDDpla:< 22 endl$ ( ($
-U
C IO
)) =ind o.Aects are Instruments )) .ecause t,e: ,a9e t,e same interface class =ind D pu.lic Instrument & pu.licD )) Redefine interface function 9oid pla: !note# const & cout 22 <=indDDpla:< 22 endl$ ( ($ 9oid tune !Instrument* i# & )) ''' i'pla: !middleC#$ ( int main !# & =ind flute$ tune !flute#$ (
A
)) Upcasting
Sandro Santos Andrade
&eclarar as :un0es como virtual na classe base. (tilizar ponteiros ou re:erBncias no momento da invocao.
)) In,eritance * upcasting 1include 2iostream3 using namespace std$ enum note & middleC" Cs,arp" Eflat ($ )) Etc' class Instrument & pu.licD 9irtual 9oid pla: !note# const & cout 22 <InstrumentDDpla:< 22 endl$ ( ($
class =ind D pu.lic Instrument & pu.licD )) Redefine interface function 9oid pla: !note# const & cout 22 <=indDDpla:< 22 endl$ ( ($ 9oid tune !Instrument* i# & )) ''' i'pla: !middleC#$ ( int main !# & =ind flute$ tune !flute#$ (
)) Upcasting
)) In,eritance * upcasting
class Instrument & pu.licD 9irtual 9oid pla: !note# const & cout 22 <InstrumentDDpla:< 22 endl$ ( ($
1include 2iostream3 using namespace std$ enum note & middleC" Cs,arp" Eflat ($ )) Etc'
-U
C IO
)) =ind o.Aects are Instruments )) .ecause t,e: ,a9e t,e same interface class =ind D pu.lic Instrument & pu.licD )) Redefine interface function 9oid pla: !note# const & cout 22 <=indDDpla:< 22 endl$ ( ($ 9oid tune !Instrument* i# & )) ''' i'pla: !middleC#$ ( int main !# & =ind flute$ tune !flute#$ (
)) Upcasting
(ma classe abstrata 3 a6uela 6ue cont3m pelo menos uma :uno virtual pura. un0es virtuais puras devem ser implementadas em classes :il2as, salvo estas tamb3m sejam abstratas. un0es virtuais puras no tBm corpo +de:inio,. Classes abstratas no podem ser instanciadas e servem somente para realizar upcast em m3todos com parametros polim!r:icos e ligao dinamica.
Considera0esC
Construtores no devem ser virtual. &estrutores devem ser virtual. dynamic)castC realiza o downcasting de :orma segura ou retorna um ponteiro nulo. Nera overhead e8tra. static)castC realiza o downcasting sem c2ecar por tipos. *verhead menor.
(owncastingC
A8emplo downcastingC
class S,ape & pu.licD 9irtual [S,ape!# &($ ($ class Circle D pu.lic S,ape &($ class S7uare D pu.lic S,ape &($ class Ot,er &($ int main !# & Circle c$ S,apeS s M *c$ s M staticNcast2S,apeS3!*c#$ CircleS cp M 0$ S7uareS sp M 0$ if !t:peid !s# MM t:peid !cp## cp M staticNcast2CircleS3!s#$ if !t:peid !s# MM t:peid !sp## sp M staticNcast2S7uareS3!s#$ if !cp >M 0# cout 22 <ItRs a circle>< 22 endl$ if !sp >M 0# cout 22 <ItRs a s7uare>< 22 endl$ (
Conjunto de classes gen3ricas para estruturas de dados e algoritmos. )iblioteca importante para o uso e:etivo do C++. 5rincipais grupos de classesC
StringsC
G3todos para buscaC find+ find)first)of+ find)last)of+ rfind, G3todos para comparaoC operator&&+ operator-&+ operator.+ operator/+ operator.&+ operator/&+ compare,
0*StreamsC
%ontainers gen3ricosC
)) Simple use of S@Q set' 1include 2cassert3 1include 2set3 using namespace std$ int main !# & set2int3 intset$ for !int i M 0$ i 2 IE$ i//# for !int A M 0$ A 2 0$ A//# )) @r: to insert duplicates intset'insert !A#$ assert !intset'siBe!# MM 0#$ (
%ontainers gen3ricosC
Containers de se6uBnciaC vector, list e de1ue. Containers adaptadoresC 1ueue, stack, priority)1ueue. Containers associativosC set, map, multiset, multimap.
int main !# & int aOP M & " I" F" G" E" \" \" J" J" J" ?" ?" ?" ?" " " " const int ASZ M siBeof a ) siBeof Sa$ 9ector2int3 9 !a" a / ASZ#$ print !9'.egin !#" 9'end !#" <9<" < <#$ 9ector2int3DDiterator it M find !9'.egin !#" 9'end !#" G#$ cout 22 <findD < 22 Sit 22 endl$ '''
"
($
Introduo ao "t#
)iblioteca open source para construo de aplica0es visuais multiplata:orma. Cont3m e8tens0es paraC
#etworking, 5rocessamento de _G/. Gultimdia +*udio, vdeo e OpenN/,. Gultit2reading. 'nternacionalizao e localizao.
Introduo ao "t#
&emonstrao
-IC
sandro.andrade@gmail.com