Programa¸c˜ao Orientada a Objeto com C++ 2 edic¸˜ao
Andr´e Duarte Bueno, UENF-LENEP-LDSC http://www.lenep.uenf.br/~bueno email:
[email protected] 25 de setembro de 2007
Copyright(C) 2003-2007 da Novatec Editora Ltda. ´ proibida a reprodu¸ca Todos os direitos reservados e protegidos pela Lei 5.988 de 14/12/1973. E ˜o desta obra, mesmo parcial, por qualquer processo, sem pr´evia autoriza¸ca ˜o, por escrito, do autor e da Editora.
Editor: RUBENS PRATES Capa: CAMILA MESQUITA Revis˜ ao: PATRIZIA ZAGNI ´ DUARTE BUENO Editora¸ca ˜o eletrˆ onica: ANDRE Revis˜ ao t´ecnica desta edi¸ca ˜o: TIAGO RIBEIRO SCHAEWER [M.Sc, Doutorando] TIAGO CALIMMAN [Mestrando] IRINEU SILVA [Mestrando] ALLAN GALANTE [M.Sc.] GIOVANNI COLONESE [M.Sc.] ISBN: XX-XXXX-XXX-X
NOVATEC EDITORA LTDA. Rua Cons. Moreira de Barros, 1084 Conj. 01 02018-012 S˜ ao Paulo, SP Brasil Tel.: +55 11 6959-6529 Fax: +55 11 6950-8869 E-mail:
[email protected] Endere¸co: www.novateceditora.com.br
Este livro foi desenvolvido no LDSC/LENEP/UENF Laborat´orio de Desenvolvimento de Software Cient´ıfico - LDSC http://www.lenep.uenf.br/~ldsc do Laborat´orio de Engenharia e Explora¸ca˜o de Petr´ oleo - LENEP http://www.lenep.uenf.br da Universidade Estadual do Norte Fluminense - Darcy Ribeiro - UENF http://www.uenf.br
2
Sum´ ario I
Filosofia e Modelagem Orientada a Objeto
49
1 Introdu¸ c˜ ao ` a Programa¸ c˜ ao 1.1 Programas e softwares . . . . . . . . . . . . . . . . . . . . 1.1.1 O que ´e um programa, um software? . . . . . . . . 1.2 Defini¸ca˜o de software propriet´ ario e software livre . . . . . 1.2.1 Defini¸ca˜o e caracter´ısticas do software propriet´ ario 1.2.2 Defini¸ca˜o e caracter´ısticas do software livre . . . . 1.2.3 Exemplos de softwares livres e propriet´ arios . . . . 1.3 Tipos de interface de um programa/software . . . . . . . . 1.3.1 Um programa sem interface (kernel num´erico) . . . 1.3.2 Um programa com interface via linha de comando 1.3.3 Um programa com interface em modo texto . . . . 1.3.4 Um software com interface em modo gr´afico . . . . 1.4 Que tipo de software devo desenvolver? . . . . . . . . . . 1.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . 1.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
51 51 51 52 52 52 54 54 55 55 56 57 58 59 59
2 Introdu¸ c˜ ao ` a Programa¸ c˜ ao Orientada a Objeto – POO 2.1 Entendendo os objetos . . . . . . . . . . . . . . . . . . . . . 2.2 Exemplo de objeto . . . . . . . . . . . . . . . . . . . . . . . 2.3 O conceito de objeto (ou instˆancia) . . . . . . . . . . . . . . 2.4 Breve hist´orico da programa¸ca˜o orientada a objeto . . . . . 2.4.1 Vis˜ ao desorganizada e vis˜ ao estruturada versus vis˜ao 2.4.2 Vantagens da POO . . . . . . . . . . . . . . . . . . . 2.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . 2.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . orientada a objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
61 61 62 63 63 64 66 66 66
3 Conceitos B´ asicos de Orienta¸ c˜ ao a Objeto – OO 3.1 Abstra¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . 3.2 Encapsulamento e oculta¸ca˜o . . . . . . . . . . . . . 3.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Atributos (propriedades e vari´ aveis) . . . . . . . . 3.5 M´etodos (fun¸co˜es, opera¸co˜es e servi¸cos) . . . . . . 3.6 Heran¸ca . . . . . . . . . . . . . . . . . . . . . . . . 3.7 Polimorfismo . . . . . . . . . . . . . . . . . . . . . 3.8 Outros conceitos u ´ teis . . . . . . . . . . . . . . . . 3.9 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . 3.10 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
69 69 70 72 73 73 74 75 76 79 80
3
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
´ SUMARIO
4 4 Modelagem Orientada a Objeto 4.1 Introdu¸ca˜o `a modelagem . . . . . . . . . . . . . . . . . . . . . . 4.1.1 O que ´e um modelo? . . . . . . . . . . . . . . . . . . . . 4.1.2 Tipos e exemplos de modelos . . . . . . . . . . . . . . . 4.1.3 Por que usamos modelos? . . . . . . . . . . . . . . . . . 4.2 Introdu¸ca˜o `a modelagem orientada a objeto . . . . . . . . . . . 4.2.1 O que ´e a modelagem orientada a objeto? . . . . . . . 4.2.2 Quando surgiu a modelagem orientada a objeto? . . . 4.2.3 Quais as vantagens da modelagem orientada a objeto? . 4.3 O que ´e a UML? . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 As diferentes vis˜ oes da UML e os respectivos diagramas 4.3.2 Os elementos da UML . . . . . . . . . . . . . . . . . . . 4.3.3 Os estere´otipos da UML2 . . . . . . . . . . . . . . . . . 4.4 Programas para modelagem orientada a objeto . . . . . . . . . 4.4.1 O programa Dia . . . . . . . . . . . . . . . . . . . . . . 4.4.2 O programa umbrello . . . . . . . . . . . . . . . . . . . 4.4.3 O programa Visual-Paradigm . . . . . . . . . . . . . . . 4.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
81 81 81 82 82 84 84 84 85 85 85 88 89 93 93 94 96 96 97
5 Engenharia de Software 5.1 O que ´e e quais s˜ ao os objetivos da engenharia de software? . 5.2 Breve hist´orico da engenharia de software . . . . . . . . . . . 5.3 Caracter´ısticas dos modelos de engenharia de software . . . . 5.3.1 Modelo seq¨ uencial linear . . . . . . . . . . . . . . . . . 5.3.2 Modelo iterativo . . . . . . . . . . . . . . . . . . . . . 5.3.3 Modelo baseado em prototipagem . . . . . . . . . . . 5.3.4 Modelo RAD – Rapid Application Development . . . 5.3.5 Modelo incremental . . . . . . . . . . . . . . . . . . . 5.3.6 Modelo espiral . . . . . . . . . . . . . . . . . . . . . . 5.3.7 Modelo TMO – Tecnologia de Modelagem de Objetos 5.3.8 Modelo UP – Unified Process . . . . . . . . . . . . . . 5.3.9 Modelo XP – eXtreme Programming . . . . . . . . . . 5.4 O modelo selecionado . . . . . . . . . . . . . . . . . . . . . . 5.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . 5.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
99 99 100 101 101 102 102 102 102 102 103 103 104 105 106 106
6 Etapas para o Desenvolvimento de um Software 6.1 Concep¸ca˜o – especifica¸ca˜o . . . . . . . . . . . . . . . . . . . 6.1.1 Casos de uso do software – cen´ arios . . . . . . . . . 6.1.2 Diagrama de casos de uso . . . . . . . . . . . . . . . 6.1.3 Senten¸cas para casos de uso . . . . . . . . . . . . . . 6.2 Elabora¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2.1 An´ alise de dom´ınio . . . . . . . . . . . . . . . . . . . 6.2.2 Identifica¸ca˜o de pacotes – assuntos . . . . . . . . . . 6.2.3 Diagrama de pacotes – assuntos, m´odulos . . . . . . 6.2.4 Senten¸cas para pacotes . . . . . . . . . . . . . . . . . 6.2.5 Montagem de prot´ otipo da interface do software . . 6.2.6 Defini¸ca˜o de cronogramas, prazos, custos, contratos 6.3 AOO – An´ alise Orientada a Objeto . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
109 110 111 111 113 114 115 116 116 117 117 118 119
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO 6.4
6.5
6.6
6.7
6.8
6.9
5
AOO – Modelo estrutural . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.1 Identifica¸ca˜o de classes . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.2 Identifica¸ca˜o de atributos . . . . . . . . . . . . . . . . . . . . . . . 6.4.3 Identifica¸ca˜o de m´etodos . . . . . . . . . . . . . . . . . . . . . . . . 6.4.4 Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.5 Identifica¸ca˜o de associa¸co˜es . . . . . . . . . . . . . . . . . . . . . . 6.4.6 Diagrama de classes com associa¸co˜es . . . . . . . . . . . . . . . . . 6.4.7 Classe de associa¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.8 Identifica¸ca˜o de agrega¸co˜es e composi¸co˜es . . . . . . . . . . . . . . 6.4.9 Diagrama de classes com agrega¸co˜es e composi¸co˜es . . . . . . . . . 6.4.10 Identifica¸ca˜o de heran¸cas . . . . . . . . . . . . . . . . . . . . . . . 6.4.11 Diagrama de classes com heran¸cas . . . . . . . . . . . . . . . . . . 6.4.12 Identifica¸ca˜o de classes abstratas e classes de interface . . . . . . . 6.4.13 Restri¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.14 Realiza¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.15 Dependˆencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.16 Identifica¸ca˜o de objetos . . . . . . . . . . . . . . . . . . . . . . . . 6.4.17 Diagrama de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4.18 Diagrama de estrutura composta . . . . . . . . . . . . . . . . . . . 6.4.19 Resumo dos diagramas do modelo estrutural . . . . . . . . . . . . 6.4.20 Itera¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AOO – Modelo dinˆ amico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.1 Identifica¸ca˜o de eventos e mensagens . . . . . . . . . . . . . . . . . 6.5.2 Diagrama de seq¨ uˆencia – eventos e mensagens . . . . . . . . . . . . 6.5.3 Diagrama de comunica¸ca˜o – colabora¸ca˜o . . . . . . . . . . . . . . 6.5.4 Identifica¸ca˜o dos estados assumidos pelo objeto . . . . . . . . . . . 6.5.5 Diagrama de m´aquina de estado . . . . . . . . . . . . . . . . . . . 6.5.6 Identifica¸ca˜o de atividades . . . . . . . . . . . . . . . . . . . . . . . 6.5.7 Diagrama de atividades . . . . . . . . . . . . . . . . . . . . . . . . 6.5.8 Diagrama de tempo . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5.9 Diagrama de intera¸ca˜o geral . . . . . . . . . . . . . . . . . . . . . . 6.5.10 Resumo dos diagramas do modelo dinˆamico . . . . . . . . . . . . . 6.5.11 Itera¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Projeto do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6.1 Defini¸ca˜o da interface de programa¸ca˜o – API . . . . . . . . . . . . 6.6.2 Sele¸ca˜o da implementa¸ca˜o de controle . . . . . . . . . . . . . . . . 6.6.3 Sele¸ca˜o das plataformas a serem suportadas . . . . . . . . . . . . . 6.6.4 Sele¸ca˜o das bibliotecas externas . . . . . . . . . . . . . . . . . . . . 6.6.5 Sele¸ca˜o da biblioteca gr´ afica a ser utilizada – GDI . . . . . . . . . 6.6.6 Sele¸ca˜o do ambiente de desenvolvimento integrado – IDE . . . . . Projeto orientado a objeto – POO . . . . . . . . . . . . . . . . . . . . . . 6.7.1 Diagrama de componentes . . . . . . . . . . . . . . . . . . . . . . . 6.7.2 Diagrama de implanta¸ca˜o – execu¸ca˜o . . . . . . . . . . . . . . . . . Implementa¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.8.1 Antes de iniciar a implementa¸ca˜o . . . . . . . . . . . . . . . . . . . 6.8.2 Roteiro para montar o c´ odigo inicial do programa com o Umbrello 6.8.3 Dicas para implementa¸ca˜o da interface gr´afica . . . . . . . . . . . Teste de software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.9.1 Por que testar? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
119 119 120 121 122 123 124 125 125 126 126 128 128 130 130 130 130 131 131 131 132 133 133 134 137 138 139 143 143 146 146 146 146 148 149 150 150 151 152 152 157 159 160 161 161 161 162 162 163
Andr´e Duarte Bueno
´ SUMARIO
6
6.10
6.11
6.12 6.13
II
6.9.2 Equipe de teste . . . . . . . . . . . . . . . . . . . . . 6.9.3 Metodologia de teste . . . . . . . . . . . . . . . . . . 6.9.4 Senten¸cas para teste de software . . . . . . . . . . . Documenta¸ca˜o do programa . . . . . . . . . . . . . . . . . . 6.10.1 Itens a serem documentados . . . . . . . . . . . . . . 6.10.2 Cart˜ oes CRC . . . . . . . . . . . . . . . . . . . . . . 6.10.3 Dicion´ario de classes . . . . . . . . . . . . . . . . . . Manuten¸ca˜o e reuso de software . . . . . . . . . . . . . . . . 6.11.1 Senten¸cas e dicas para conseguir o reuso de software 6.11.2 Senten¸cas para aumentar o empacotamento . . . . . 6.11.3 Senten¸cas para conseguir o reuso de classes . . . . . 6.11.4 Senten¸cas para conseguir o reuso de m´etodos . . . . 6.11.5 Senten¸cas para montagem de bibliotecas . . . . . . 6.11.6 Senten¸cas para montagem de framework . . . . . . 6.11.7 Senten¸cas para facilitar a extens˜ao de um programa 6.11.8 Senten¸cas para programa¸ca˜o em grande escala . . . Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
POO usando C++
. . . . . . . . . . . . . . . . . .
163 163 166 168 168 172 172 173 173 173 173 174 175 175 176 176 177 177
181
7 Introdu¸ c˜ ao ao C++ 7.1 Um pouco de hist´oria . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Exemplos de aplica¸co˜es em C++ . . . . . . . . . . . . . . . . . . . . 7.3 O que ´e o Ansi C++? . . . . . . . . . . . . . . . . . . . . . . . . . . 7.4 Quais as novidades e vantagens de C++ em rela¸ca˜o a C? . . . . . . 7.5 Quais os tipos de programas em C++ . . . . . . . . . . . . . . . . . 7.6 Diferen¸cas de nomenclatura – POO e C++ . . . . . . . . . . . . . . 7.7 Editar, pr´e-processar, compilar, linkar, debugar e otimizar . . . . . . 7.8 Layout de um programa orientado a objeto em C++2 . . . . . . . . 7.8.1 Arquivo de projeto . . . . . . . . . . . . . . . . . . . . . . . . 7.8.2 Arquivo de cabe¸calho da classe – CNomeClasse.h . . . . . . . 7.8.3 Arquivo de implementa¸ca˜o da classe – CNomeClasse.cpp . . . 7.8.4 Arquivo de implementa¸ca˜o da fun¸ca˜o main() – programa.cpp 7.9 Senten¸cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.10 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.11 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
183 183 184 185 185 186 186 187 189 189 189 190 191 192 193 193
8 Conceitos b´ asicos de C++ 8.1 Sobre a sintaxe de C++ . . . . . . . . . . . . . . . . . 8.2 Palavras-chave do C++ . . . . . . . . . . . . . . . . . 8.3 Nome dos objetos – identificadores . . . . . . . . . . . 8.3.1 Conven¸ca˜o para nomes de objetos . . . . . . . 8.4 Declara¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . 8.4.1 Exemplos de declara¸co˜es e defini¸co˜es2 . . . . . 8.5 Defini¸co˜es . . . . . . . . . . . . . . . . . . . . . . . . . 8.6 Introdu¸ca˜o `a fun¸ca˜o main() . . . . . . . . . . . . . . . 8.7 Introdu¸ca˜o `a entrada e sa´ıda de dados com cin e cout 8.7.1 Usando cout . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
195 195 198 199 199 199 200 200 201 201 202
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
203 205 205 206 206 207 208 208 210 213 214 215 216
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
217 217 217 221 222 224 225 225 225 228 229 229 230 231 233 235 235 236 236 238 239 239 240 240
10 Namespace 10.1 O que ´e um namespace? . . . . . . . . . . . . . . . . . . . . 10.2 Utilizando o espa¸co de nomes da biblioteca-padr˜ ao – std:: 10.3 Mudando escopo com using . . . . . . . . . . . . . . . . . . 10.4 Prot´otipo para declarar e definir um namespace . . . . . . . 10.5 Namespaces anˆ onimos . . . . . . . . . . . . . . . . . . . . . 10.6 Namespaces – uso avan¸cado2 . . . . . . . . . . . . . . . . . 10.6.1 Compondo namespace com using2 . . . . . . . . . . 10.6.2 Namespace aninhado2 . . . . . . . . . . . . . . . . . 10.6.3 Usando vari´ aveis est´ aticas em um namespace2 . . . 10.7 Senten¸cas para namespace . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
243 243 244 244 245 247 248 248 248 248 249
8.8 8.9
8.10 8.11 8.12 8.13 8.14 8.15
8.7.2 Usando cin . . . . . . . . . . . . . . . . Introdu¸ca˜o ` as diretrizes de pr´e-processador . . 8.8.1 Usando #ifdef..#endif . . . . . . . . Introdu¸ca˜o ` as estruturas de controle . . . . . . 8.9.1 Usando for . . . . . . . . . . . . . . . . 8.9.2 Usando while e fun¸co˜es da biblioteca de Introdu¸ca˜o aos operadores de C++ . . . . . . . 8.10.1 Usando operadores de C++ . . . . . . . Introdu¸ca˜o as fun¸co˜es . . . . . . . . . . . . . . Declara¸co˜es e escopo . . . . . . . . . . . . . . . Senten¸cas para conceitos b´ asicos de C++ . . . Resumo do cap´ıtulo . . . . . . . . . . . . . . . Exerc´ıcios . . . . . . . . . . . . . . . . . . . . .
7 . . . . . . . . . . . . . . . . . . . . . . . . . C/C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9 Tipos 9.1 Introdu¸ca˜o ao conceito de tipos . . . . . . . . . . . . 9.2 Uso de tipos predefinidos de C++ . . . . . . . . . . 9.2.1 Uso de sufixos para os tipos predefinidos2 . . 9.2.2 Uso avan¸cado dos tipos predefinidos2 . . . . . 9.2.3 Senten¸cas para uso de tipos predefinidos . . . 9.3 Uso de tipos do usu´ ario . . . . . . . . . . . . . . . . 9.3.1 Introdu¸ca˜o aos vetores no estilo de C . . . . . 9.3.2 Introdu¸ca˜o ` as estruturas . . . . . . . . . . . 9.3.3 Introdu¸ca˜o ` as uni˜ oes . . . . . . . . . . . . . . 9.3.4 Introdu¸ca˜o ` as enumera¸co˜es . . . . . . . . . . 9.3.5 Introdu¸ca˜o ` as classes . . . . . . . . . . . . . . 9.4 Usando tipos definidos em bibliotecas – STL . . . . 9.4.1 Introdu¸ca˜o ` a classe
. . . . . . . . . 9.4.2 Introdu¸ca˜o ` a STL e ` a classe . . . . 9.5 Manipulando tipos . . . . . . . . . . . . . . . . . . . 9.5.1 Criando apelidos – typedef . . . . . . . . . 9.5.2 Obtendo o tipo de tamanho – size_t() . . . 9.5.3 Obtendo o tamanho dos objetos – sizeof() . 9.5.4 Identificando o tipo do objeto – typeid()2 . 9.6 Vantagem da tipifica¸ca˜o forte do C++ . . . . . . . . 9.7 Senten¸cas para tipos . . . . . . . . . . . . . . . . . . 9.8 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . 9.9 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO
8
10.8 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 10.9 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 11 Classes 11.1 Prot´otipo para declarar e definir classes . . . . . . . . 11.2 Encapsulamento em C++ utilizando o especificador de 11.3 Classes e escopo . . . . . . . . . . . . . . . . . . . . . 11.4 Classes e diretrizes de pr´e-processador . . . . . . . . . 11.5 Classes – Uso avan¸cado2 . . . . . . . . . . . . . . . . . 11.5.1 Classes abstratas2 . . . . . . . . . . . . . . . . 11.5.2 Classes de interface2 . . . . . . . . . . . . . . . 11.5.3 Classes encapsulamento e robustes de c´ odigo2 . 3 11.5.4 Classes aninhadas . . . . . . . . . . . . . . . . 11.5.5 Classes do tipo POD3 . . . . . . . . . . . . . . 11.5.6 Classes do tipo trivial3 . . . . . . . . . . . . . . 11.6 Senten¸cas para classes . . . . . . . . . . . . . . . . . . 11.7 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . 11.8 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
251 251 252 253 253 254 254 255 255 256 257 257 258 259 259
12 Atributos 12.1 Prot´otipo para declarar e definir atributos 12.2 Atributos de objeto . . . . . . . . . . . . . 12.3 Atributos de classe – static . . . . . . . 12.4 Atributos constantes – const . . . . . . . 12.5 Atributos – uso avan¸cado2 . . . . . . . . . 12.5.1 Atributos mutantes – mutable2 . . 12.5.2 Atributos vol´ ateis – volatile3 . . 12.6 Senten¸cas para atributos . . . . . . . . . . 12.7 Resumo do cap´ıtulo . . . . . . . . . . . . 12.8 Exerc´ıcios . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
261 261 262 263 265 266 266 267 267 268 268
13 M´ etodos 13.1 Introdu¸ca˜o aos m´etodos de C++ . . . . . . . . . 13.2 Prot´otipo para declarar e definir m´etodos . . . . 13.3 Declara¸ca˜o de um m´etodo . . . . . . . . . . . . . 13.4 Defini¸ca˜o de um m´etodo . . . . . . . . . . . . . . 13.5 Retorno de um m´etodo . . . . . . . . . . . . . . . 13.6 Parˆametros dos m´etodos . . . . . . . . . . . . . . 13.6.1 Passagem dos parˆ ametros por c´ opia . . . 13.6.2 Passagem dos parˆ ametros por referˆencia 13.6.3 Passagem dos parˆ ametros por ponteiro . . 13.6.4 Parˆametros predefinidos – inicializadores . 13.7 M´etodos normais . . . . . . . . . . . . . . . . . . 13.8 M´etodos constantes – const . . . . . . . . . . . . 13.9 M´etodos est´ aticos – static . . . . . . . . . . . . 13.10M´etodos em linha – inline . . . . . . . . . . . . 13.11M´etodos – uso avan¸cado . . . . . . . . . . . . . . 13.12Senten¸cas para m´etodos . . . . . . . . . . . . . . 13.13Resumo do cap´ıtulo . . . . . . . . . . . . . . . . 13.14Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
269 269 270 271 272 273 273 274 274 275 277 278 281 284 286 290 290 292 292
. . . . . . . . . .
. . . . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO 14 Sobrecarga de M´ etodos 14.1 Prot´otipo para sobrecarga de m´etodos . . . . . . . 14.2 Como implementar a sobrecarga de m´etodos . . . 14.3 Sobrecarga de m´etodos – conceitos avan¸cados2 . . 14.3.1 Acessibilidade x visibilidade: como ´e feita executado . . . . . . . . . . . . . . . . . . . 14.4 Senten¸ca para sobrecarga de m´etodos . . . . . . . . 14.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . 14.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . .
9
. . . .
297 297 298 298
15 Ponteiros, Referˆ encias e Gerenciamento de Mem´ oria 15.1 Prot´otipo para declarar e definir ponteiros e referˆencias . . . . . . . . . . . . . 15.2 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3 Cria¸ca˜o e uso de objetos dinˆ amicos com ponteiros . . . . . . . . . . . . . . . . . 15.3.1 O operador new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.2 O operador delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.4 Ponteiro this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 Ponteiros const e ponteiros para const . . . . . . . . . . . . . . . . . . . . . . 15.5.1 Ponteiro para um objeto constante . . . . . . . . . . . . . . . . . . . . . 15.5.2 Ponteiro constante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5.3 Ponteiro constante para um objeto constante . . . . . . . . . . . . . . . 15.6 Referˆencias (&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.6.1 Diferen¸cas entre referˆencia e ponteiro . . . . . . . . . . . . . . . . . . . . 15.6.2 Referˆencias para ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . 15.7 Conceitos b´ asicos de gerenciamento de mem´oria2 . . . . . . . . . . . . . . . . . 15.7.1 Entendendo o uso de new/delete com vetores . . . . . . . . . . . . . . 15.7.2 Alinhamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.7.3 D´ uvidas freq¨ uentes no uso de new, delete e gerenciamento de mem´oria2 15.8 Senten¸cas para ponteiros, referˆencias e gerenciamento de mem´oria . . . . . . . 15.9 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.10Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
299 299 300 301 302 302 304 305 305 306 306 306 308 308 308 308 308 310 312 313 314
16 M´ etodos Construtores e Destrutores 16.1 Introdu¸ca˜o aos m´etodos construtores e destrutores . 16.2 Prot´otipo para construtores e destrutores . . . . . . 16.3 Construtor default T() . . . . . . . . . . . . . . . . . 16.4 Inicializa¸ca˜o dos atributos da classe nos contrutores 16.5 Construtor de c´ opia T(const T& obj) . . . . . . . . 16.5.1 Construtor de c´ opia e objetos dinˆamicos . . . 16.6 Quando o objeto ´e constru´ıdo/destru´ıdo . . . . . . . 16.6.1 Ordem de constru¸ca˜o dos atributos . . . . . . 16.6.2 Ordem de destrui¸ca˜o dos atributos . . . . . . 16.6.3 Constru¸ca˜o de objetos globais est´ aticos . . . 16.7 Construtor e ambig¨ uidade . . . . . . . . . . . . . . . 16.8 Construtor e destrutor – conceitos avan¸cados2 . . . . 16.8.1 Construtor e ambig¨ uidade . . . . . . . . . . . 16.8.2 Construtor e interface . . . . . . . . . . . . . 16.9 Senten¸cas para construtores e destrutores . . . . . . 16.10Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . 16.11Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
315 315 316 317 318 319 323 325 326 327 328 329 329 330 331 332 334 335
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . do . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . m´etodo a . . . . . . . . . . . . . . . . . . . . . . . .
295 . 295 . 295 . 297
. . . . . . ser . . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . . . . . . . . a sele¸ca˜o . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO
10 17 Heran¸ ca 17.1 Prot´otipo para heran¸ca simples . . . . . . . . . . . . . . 17.2 Como implementar a heran¸ca simples . . . . . . . . . . 17.3 Especificador de heran¸ca . . . . . . . . . . . . . . . . . . 17.4 Diferen¸ca entre heran¸ca p´ ublica e privada . . . . . . . . 17.5 Mudando a visibilidade em heran¸cas com using . . . . . 17.6 Chamando construtores da classe-base explicitamente . 17.7 Redeclara¸ca˜o de m´etodo ou atributo na classe-derivada . 17.8 Senten¸cas para heran¸ca . . . . . . . . . . . . . . . . . . 17.9 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . 17.10Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
337 337 338 339 341 341 342 342 344 345 346
18 Heran¸ ca M´ ultipla 18.1 Prot´otipo para heran¸ca m´ ultipla . . . . . . . . . . . . . . . . . 18.2 Como implementar a heran¸ca m´ ultipla . . . . . . . . . . . . . . 18.3 Resolvendo ambig¨ uidade em heran¸ca m´ ultipla com using . . . 18.4 Heran¸ca m´ ultipla com base comum . . . . . . . . . . . . . . . . 18.5 Ordem de cria¸ca˜o e destrui¸ca˜o dos objetos em heran¸cas . . . . 18.6 Heran¸ca m´ ultipla virtual . . . . . . . . . . . . . . . . . . . . . 18.7 Ordem de cria¸ca˜o e destrui¸ca˜o dos objetos em heran¸ca m´ ultipla 18.8 Senten¸cas para heran¸ca m´ ultipla . . . . . . . . . . . . . . . . . 18.9 Exemplo de heran¸ca simples e heran¸ca m´ ultipla . . . . . . . . . 18.10An´alise dos erros emitidos pelo compilador2 . . . . . . . . . . . 18.11Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . 18.12Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . virtual . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
347 347 347 349 349 351 352 353 355 357 359 361 361
19 Polimorfismo 19.1 M´etodos n˜ ao virtuais . . . . . . . . . . . 19.2 M´etodos virtuais . . . . . . . . . . . . . 19.2.1 Senten¸cas para m´etodos virtuais 19.3 Como implementar o polimorfismo . . . 19.3.1 Senten¸cas para polimorfismo . . 19.4 M´etodos virtuais puros . . . . . . . . . 19.5 M´etodos virtuais sobrecarregados . . . . 19.6 Exemplo completo com polimorfismo . . 19.7 Resumo do cap´ıtulo . . . . . . . . . . . 19.8 Exerc´ıcios . . . . . . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
363 363 365 366 367 369 369 369 370 378 379
. . . . . . . .
381 . 381 . 382 . 383 . 383 . 384 . 385 . 386 . 386
20 Friend 20.1 Introdu¸ca˜o ao conceito de friend . 20.2 Prot´otipo para friend . . . . . . . 20.3 Classes friend . . . . . . . . . . . 20.4 M´etodos friend . . . . . . . . . . 20.5 Fun¸co˜es globais friend . . . . . . 20.6 Senten¸cas para friend . . . . . . . 20.7 Resumo do cap´ıtulo . . . . . . . . 20.8 Exerc´ıcios . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO
11
21 Sobrecarga de Operador 21.1 Introdu¸ca˜o ` a sobrecarga de operador . . . . . . . . . . . 21.2 Operadores que podem ser sobrecarregados . . . . . . . 21.3 Prot´otipo para sobrecarga de operador . . . . . . . . . . 21.4 Sobrecarga de operador como fun¸ca˜o friend . . . . . . 21.5 Sobrecarga de operador como m´etodo membro da classe 21.6 Exemplo pr´atico de sobrecarga de operador . . . . . . . 21.7 Como sobrecarregar ++ e -- . . . . . . . . . . . . . . . . 21.8 Como sobrecarregar new2 . . . . . . . . . . . . . . . . . 21.8.1 Como sobrecarregar new dentro de uma classe2 . 21.9 Senten¸cas para sobrecarga de operador . . . . . . . . . . 21.10Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . 21.11Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
387 387 388 388 389 390 391 396 396 397 398 400 401
22 Entrada e Sa´ıda 22.1 Introdu¸ca˜o ` a entrada e sa´ıda de dados com C++ 22.1.1 Streams buferizadas . . . . . . . . . . . . 22.2 Biblioteca de entrada e sa´ıda . . . . . . . . . . . 22.3 A classe ios_base . . . . . . . . . . . . . . . . . 22.4 A classe . . . . . . . . . . . . . . . . . 22.5 A classe . . . . . . . . . . . . . . . . . 22.5.1 Senten¸cas para . . . . . . . . . 22.6 A classe . . . . . . . . . . . . . . . . . . . 22.6.1 Senten¸cas para . . . . . . . . . . . 22.7 A classe . . . . . . . . . . . . . . . . . 22.7.1 Senten¸cas para . . . . . . . . . 22.8 A classe . . . . . . . . . . . . . . . . . 22.9 Entrada e sa´ıda – uso avan¸cado . . . . . . . . . . 22.9.1 Como criar e usar um manipulador . . . . 22.9.2 A classe locale2 . . . . . . . . . . . . . . 22.9.3 Usando facets 2 . . . . . . . . . . . . . . . 22.10Senten¸cas para stream . . . . . . . . . . . . . . . 22.11Resumo do cap´ıtulo . . . . . . . . . . . . . . . . 22.12Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
403 403 404 404 405 411 414 415 415 416 417 421 422 423 423 424 427 428 428 429
. . . . . . . . . . . .
431 . 431 . 431 . 436 . 439 . 441 . 441 . 443 . 444 . 444 . 446 . 446 . 447
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
23 Entrada e Sa´ıda com Arquivos de Disco 23.1 Introdu¸ca˜o ao acesso a disco . . . . . . . . . . . . . . . . . . . . 23.2 A classe . . . . . . . . . . . . . . . . . . . . . . . . . 23.3 Armazenando e lendo objetos . . . . . . . . . . . . . . . . . . . 23.4 Redirecionamento de entrada e sa´ıda . . . . . . . . . . . . . . . 23.5 Entrada e Sa´ıda com Arquivos de Disco - Uso Avan¸cado . . . 23.5.1 Posicionando ponteiros de arquivos2 . . . . . . . . . . . 23.5.2 Acessando a impressora e a sa´ıda auxiliar2 . . . . . . . . 23.5.3 Arquivos de disco bin´ arios2 . . . . . . . . . . . . . . . . 23.5.4 Executando e enviando comandos para outro programa2 23.6 Senten¸cas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23.7 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . 23.8 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
Andr´e Duarte Bueno
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
´ SUMARIO
12 24 A Classe 24.1 Introdu¸ca˜o `as strings . . . . . . . . . . . . . 24.2 M´etodos de . . . . . . . . . . . . . 24.2.1 Construtores e destrutor . . . . . . . . 24.2.2 Iteradores . . . . . . . . . . . . . . . . 24.2.3 Manipula¸ca˜o do tamanho da string . 24.2.4 Operadores de acesso . . . . . . . . . 24.2.5 Atribui¸ca˜o e concatena¸ca˜o . . . . . . . 24.2.6 Inser¸ca˜o, remo¸ca˜o, substitui¸ca˜o, c´ opia 24.2.7 Compara¸ca˜o . . . . . . . . . . . . . . 24.2.8 Substrings . . . . . . . . . . . . . . . . 24.2.9 Pesquisa . . . . . . . . . . . . . . . . . 24.3 Exemplos de uso de . . . . . . . . . 24.4 Senten¸cas para strings de C++ . . . . . . . . 24.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . 24.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
449 449 450 450 451 451 452 452 453 453 454 454 455 459 460 460
25 Convers˜ oes 25.1 Prot´otipo para convers˜ oes . . . . . . . . . . . . . . . 25.2 Necessidade de convers˜ ao . . . . . . . . . . . . . . . 25.3 Construtor de convers˜ ao . . . . . . . . . . . . . . . . 25.4 Operador de convers˜ ao - cast . . . . . . . . . . . . . 25.5 Convers˜ ao explicita nos construtores com explicit . 25.6 Convers˜ ao est´ atica com static_cast<> . . . . . . . 25.7 Convers˜ ao dinˆamica com dynamic_cast<> . . . . . . 25.7.1 dynamic_cast<> e referˆencias . . . . . . . . . 25.8 Convers˜ ao com const_cast<> . . . . . . . . . . . . . 25.9 Convers˜ ao com reinterpret_cast<> . . . . . . . . 25.10Senten¸cas para convers˜ oes . . . . . . . . . . . . . . . 25.11Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . 25.12Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
461 461 462 463 464 465 466 466 468 468 468 469 470 470
26 Exce¸ co ˜es 26.1 Introdu¸ca˜o `as exce¸co˜es . . . . . . . . . . . . . . . . . 26.2 Prot´otipo para exce¸co˜es . . . . . . . . . . . . . . . . 26.3 Conceitos b´ asicos de exce¸co˜es . . . . . . . . . . . . . 26.3.1 try . . . . . . . . . . . . . . . . . . . . . . . 26.3.2 throw . . . . . . . . . . . . . . . . . . . . . . 26.3.3 catch . . . . . . . . . . . . . . . . . . . . . . 26.4 Exce¸co˜es-padr˜ ao . . . . . . . . . . . . . . . . . . . . 26.5 Seq¨ uencia de execu¸ca˜o . . . . . . . . . . . . . . . . . 26.5.1 Seq¨ uencia de execu¸ca˜o sem exce¸ca˜o . . . . . . 26.5.2 Seq¨ uencia de execu¸ca˜o com exce¸ca˜o . . . . . 26.6 Como fica a pilha (heap) . . . . . . . . . . . . . . . . 26.7 Exce¸co˜es n˜ ao tratadas . . . . . . . . . . . . . . . . . 26.8 Exce¸co˜es - Uso avan¸cado . . . . . . . . . . . . . . . . 26.8.1 Exce¸ca˜o para new2 . . . . . . . . . . . . . . . 26.8.2 Controlando entrada com exce¸co˜es2 . . . . . 26.8.3 Adotando uma pol´ıtica para uso de exce¸co˜es2 26.9 Senten¸cas para exce¸co˜es . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
473 473 474 475 476 476 477 478 478 479 479 479 482 483 483 484 486 486
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO
13
26.10Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 26.11Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 27 Templates ou Gabaritos 27.1 Introdu¸ca˜o aos templates (gabaritos) . . . . . . . . . . . . . . . . 27.2 Fun¸co˜es templates . . . . . . . . . . . . . . . . . . . . . . . . . . 27.2.1 Prot´otipo para fun¸co˜es templates . . . . . . . . . . . . . . 27.2.2 Instˆ ancias de fun¸co˜es template e dedu¸ca˜o de argumentos 27.2.3 Declara¸ca˜o expl´ıcita de fun¸ca˜o template . . . . . . . . . . 27.2.4 Resolvendo problemas de convers˜ oes . . . . . . . . . . . . 27.2.5 Sobrecarga de fun¸ca˜o template . . . . . . . . . . . . . . . 27.2.6 Fun¸ca˜o template com objeto est´ atico . . . . . . . . . . . 27.3 Classes templates ou tipos param´etricos . . . . . . . . . . . . . . 27.3.1 Prot´otipo para classes template . . . . . . . . . . . . . . 27.3.2 Regras gerais para classes template . . . . . . . . . . . . . 27.3.3 Argumentos pr´e-definidos em classes templates . . . . . . 27.4 Senten¸cas para templates . . . . . . . . . . . . . . . . . . . . . . 27.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . 27.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
491 492 492 492 493 494 495 495 496 496 496 497 500 503 505 505
28 Templates - Uso Avan¸ cado 28.1 Fun¸co˜es template uso avan¸cado . . . . . . . . . . . . . . . . 28.1.1 Especializa¸ca˜o de fun¸co˜es template . . . . . . . . . . 28.1.2 Fun¸co˜es expandidas em tempo de compila¸ca˜o . . . . . 28.1.3 Usando typename com templates . . . . . . . . . . . . 28.1.4 Mapeando fun¸co˜es template utilizando especializa¸co˜es 28.1.5 Fun¸co˜es template e friend . . . . . . . . . . . . . . . 28.2 Classes template uso avan¸cado . . . . . . . . . . . . . . . . . 28.2.1 Templates dentro de uma classe template . . . . . . . 28.2.2 Especializa¸ca˜o de classes templates . . . . . . . . . . . 28.2.3 Instanciando fun¸co˜es e classes template2 . . . . . . . . 28.3 Uso de export com templates3 . . . . . . . . . . . . . . . . . 28.4 Senten¸cas para uso avan¸cado de templates . . . . . . . . . . . 28.5 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . 28.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
507 507 507 509 510 511 513 513 513 517 518 520 520 522 522
29 Implementando Associa¸ co ˜es em C++ 29.1 Introdu¸ca˜o ` as associa¸co˜es em C++ . . 29.2 Associa¸ca˜o sem atributo . . . . . . . . 29.3 Associa¸ca˜o com atributo . . . . . . . . 29.4 Resumo do cap´ıtulo . . . . . . . . . . 29.5 Exerc´ıcios . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
523 523 523 524 525 525
30 As Classes , e as Fun¸ co ˜es Matem´ aticas de 30.1 Introdu¸ca˜o ` a biblioteca de C . . . . . . . . . . . . . . . . . . . . 30.1.1 Fun¸coes de . . . . . . . . . . . . . . . . . . . . . . . . . . 30.1.2 Exemplos de uso de . . . . . . . . . . . . . . . . . . . . . 30.2 Introdu¸ca˜o ` a classe . . . . . . . . . . . . . . . . . . . . . . . . 30.2.1 M´etodos de . . . . . . . . . . . . . . . . . . . . . . . . 30.2.2 Exemplo de uso de . . . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
527 527 527 529 530 530 532
. . . . .
. . . . .
. . . . .
. . . . .
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Andr´e Duarte Bueno
´ SUMARIO
14 30.2.3 Resumo da classe fornecida pela biblioteca padr˜ ao 30.3 Introdu¸ca˜o `a classe . . . . . . . . . . . . . . . . . . . . . . 30.3.1 M´etodos de . . . . . . . . . . . . . . . . . . . . . 30.3.2 Exemplos de uso da classe . . . . . . . . . . . . . 30.3.3 Exemplo de uso de com 2 . . . . . . . . . 30.4 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . . 30.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
III
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
Introdu¸c˜ ao a STL
. . . . . . .
532 534 535 535 537 539 539
541
31 Introdu¸ c˜ ao a Biblioteca Padr˜ ao de Gabaritos de C++ - STL 31.1 O que ´e a STL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1.1 Caracter´ısticas da STL . . . . . . . . . . . . . . . . . . . . 31.1.2 Componentes da STL . . . . . . . . . . . . . . . . . . . . 31.2 Introdu¸ca˜o aos containers . . . . . . . . . . . . . . . . . . . . . . 31.2.1 Container’s seq¨ uencias . . . . . . . . . . . . . . . . . . . . 31.2.2 Container’s associativos . . . . . . . . . . . . . . . . . . . 31.2.3 Container’s adaptativos . . . . . . . . . . . . . . . . . . . 31.2.4 M´etodos e operadores comuns aos diversos container’s . . 31.2.5 M´etodos v´alidos apenas para os container’s seq¨ uenciais . 31.2.6 Typedef´s comuns aos diversos containers2 . . . . . . . . 31.3 Introdu¸ca˜o aos iteradores - iterators . . . . . . . . . . . . . . . 31.3.1 Tipos de iteradores . . . . . . . . . . . . . . . . . . . . . . 31.3.2 Opera¸co˜es comuns com iteradores2 . . . . . . . . . . . . . 31.4 Iteradores - Uso avan¸cado2 . . . . . . . . . . . . . . . . . . . . . 31.4.1 Iteradores de inser¸ca˜o . . . . . . . . . . . . . . . . . . . . 31.5 Senten¸cas para STL e iteradores . . . . . . . . . . . . . . . . . . 31.6 Fun¸ca˜o predicado . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.7 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . 31.8 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
543 543 544 544 545 545 546 547 547 547 548 549 549 550 552 552 554 555 555 555
32 Os Containers Sequˆ enciais , , 32.1 A classe container . . . . . . . . . . . . . . . 32.1.1 Construtores e destrutor . . . . . . . . . . . . . 32.1.2 Iteradores de . . . . . . . . . . . . . 32.1.3 Referˆencias e acesso . . . . . . . . . . . . . . . 32.1.4 Operadores . . . . . . . . . . . . . . . . . . . . 32.1.5 Capacidade e redimensionamento . . . . . . . . 32.1.6 Inser¸ca˜o, dele¸ca˜o e atribui¸ca˜o . . . . . . . . . . 32.1.7 Operadores sobrecarregados . . . . . . . . . . . 32.1.8 Exemplo de . . . . . . . . . . . . . . 32.1.9 Senten¸cas para . . . . . . . . . . . . 32.2 A classe container . . . . . . . . . . . . . . . . 32.2.1 Construtores e destrutor . . . . . . . . . . . . . 32.2.2 Operadores . . . . . . . . . . . . . . . . . . . . 32.2.3 Referˆencia e acesso . . . . . . . . . . . . . . . . 32.2.4 Inser¸ca˜o, mistura e ordena¸ca˜o . . . . . . . . . . 32.2.5 Remo¸ca˜o e c´ opia u ´ nica . . . . . . . . . . . . . . 32.2.6 Exemplo de . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
557 557 558 559 560 561 561 561 562 562 564 565 565 566 566 566 567 568
Novatec - Programa¸ca˜o Orientada a Objeto com C++
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
Andr´e Duarte Bueno
´ SUMARIO 32.2.7 Senten¸cas para . 32.3 A classe container . . 32.3.1 Construtores e destrutor 32.3.2 Exemplo de . . 32.4 Resumo do cap´ıtulo . . . . . . 32.5 Exerc´ıcios . . . . . . . . . . . .
15 . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
571 571 572 572 573 574
33 Os Containers Adaptativos , e 33.1 A classe container . . . . . . . . . . . . . . . . . . . . . . 33.1.1 M´etodos de . . . . . . . . . . . . . . . . . . . . . . 33.1.2 A listagem da classe . . . . . . . . . . . . . . . . . 33.1.3 Exemplo de . . . . . . . . . . . . . . . . . . . . . . 33.2 A classe container . . . . . . . . . . . . . . . . . . . . . . 33.2.1 M´etodos de . . . . . . . . . . . . . . . . . . . . . . 33.2.2 A listagem da classe . . . . . . . . . . . . . . . . . 33.2.3 Exemplo de . . . . . . . . . . . . . . . . . . . . . . 33.3 A classe container . . . . . . . . . . . . . . . . 33.4 Resumo do cap´ıtulo . . . . . . . . . . . . . . . . . . . . . . . . . . 33.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
577 577 578 578 579 580 581 581 582 582 583 583
,