Transcript
LABORATÓRIO DE MEIOS POROSOS E PROPRIEDADES TERMOFÍSICAS e NÚCLEO DE PESQUISA EM CONSTRUÇÃO
Apostila de Programação Orientada a Objeto em C++
André Duarte Bueno, UFSC-LMPT-NPC
http://www.lmpt.ufsc.br/~andre email:
[email protected] Versão 0.4
22 de agosto de 2002
Apostila de Programação Orientada a Objeto em
C++. Versão 0.4.
Distribuída na forma GPL (http://www.gnu.org). Copyright (C) 2002 - André Duarte Bueno. Esta apostila é software livre; você pode redistribuí-la e/ou modicá-la sob os termos da Licença Pública Geral GNU, conforme publicada pela Free Software Foundation; tanto a versão 2 da Licença como (a seu critério) qualquer versão mais nova.
Desenvolvida no Laboratório de Meios Porosos e Propriedades Termofísicas (http://www.lmpt.ufsc.br) e no Núcleo de Pesquisa em Construção (http://www.npc.ufsc.br), com apoio do Curso de Pós-Graduação em Engenharia Mecanica (http://www.posmec.ufsc.br) e da Universidade Federal de Santa Catarina (http://www.ufsc.br).
2
Sumário I Filosoa de POO
37
1 Introdução a Programação Orientada a Objeto
39
1.1 Passado/Presente/Futuro . . . . . . . . . . . . . . . . . . . . . 1.1.1 Passado . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Presente . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3 Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Seleção da plataforma de programação . . . . . . . . . . . . . 1.2.1 Seleção do ambiente gráco - GDI (bibliotecas grácas) 1.3 Ambientes de desenvolvimento . . . . . . . . . . . . . . . . . . 1.4 Exemplos de objetos . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 Um relógio . . . . . . . . . . . . . . . . . . . . . . . . . 1.4.2 Um programa de integração numérica . . . . . . . . . .
2 Conceitos Básicos de POO 2.1 2.2 2.3 2.4 2.5 2.6 2.7
Abstração . . . . . . . . . . . . . . Objeto (ou Instância) . . . . . . . . Classes . . . . . . . . . . . . . . . . Encapsulamento . . . . . . . . . . . Atributos (Propriedades/Variáveis) Métodos (Serviços/Funções) . . . . Herança (Hereditariedade) . . . . . 2.7.1 Herança simples . . . . . . . 2.7.2 Herança múltipla . . . . . . 2.8 Polimorsmo . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
39 39 39 40 40 41 41 43 43 44
47
47 47 48 48 49 50 50 51 51 52
3 Diagramas UML
53
II POO usando C++
57
4 Introdução ao C++
59
3.1 Programas para desenho dos diagramas . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Diagramas UML usando o programa dia . . . . . . . . . . . . . . . . . . . . . . .
4.1 Um pouco de história . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 O que é o Ansi C++? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Quais as novidade e vantagens de C++? . . . . . . . . . . . . . . . . . . . . . . . 3
53 53
59 60 60
SUMÁRIO
4 4.4 4.5 4.6 4.7
Tipos de programação em C++ . . . . . . . . . . . . . . . . . . . Compilar, linkar, debugar e proler . . . . . . . . . . . . . . . . . Diferenças de nomenclatura (POO e C++) . . . . . . . . . . . . . Layout de um programa . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 Arquivo de projeto . . . . . . . . . . . . . . . . . . . . . . 4.7.2 Arquivo de cabeçalho da classe (*.h) . . . . . . . . . . . . 4.7.3 Arquivo de implementação da classe (*.cpp) . . . . . . . . 4.7.4 Arquivo de implementação da função main (programa.cpp) 4.8 Exemplo de um programa orientado a objeto em C++ . . . . . .
5 Conceitos Básicos de C++ 5.1 5.2 5.3 5.4
Sobre a sintaxe de C++ . . . . . . . . . Conceitos básicos de C++ . . . . . . . . Palavras chaves do C++ . . . . . . . . . Nome dos objetos (identicadores) . . . 5.4.1 Convenção para nomes de objetos 5.5 Declarações . . . . . . . . . . . . . . . . 5.5.1 Sentenças para declarações . . . . 5.5.2 Exemplos de declarações2 . . . . 5.6 Denições . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
Introdução ao conceito de tipos . . . . . . . . . . . . Uso de tipos pré-denidos de C++ . . . . . . . . . . Uso de tipos do usuário . . . . . . . . . . . . . . . . . Uso de tipos denidos em bibliotecas externas (STL) Vantagem da tipicação forte do C++ . . . . . . . . Sentenças para tipos . . . . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
O que é um namespace ? . . . . . . . . . . . . . . . . . . . . Usando o espaço de nomes da biblioteca padrão de C++ (std) Denindo um namespace2 . . . . . . . . . . . . . . . . . . . . Compondo namespace2 . . . . . . . . . . . . . . . . . . . . . . Sentenças para namespace . . . . . . . . . . . . . . . . . . . .
8 Classes 8.1 8.2 8.3 8.4
. . . . . . . . .
. . . . . . . . .
7 Namespace 7.1 7.2 7.3 7.4 7.5
. . . . . . . . .
. . . . . . . . .
6 Tipos 6.1 6.2 6.3 6.4 6.5 6.6
. . . . . . . . .
Protótipo para declarar e denir classes . . . . . . . Encapsulamento em C++ usando o especicador de Classes aninhadas2 . . . . . . . . . . . . . . . . . . Sentenças para classes . . . . . . . . . . . . . . . .
9 Atributos
9.1 Protótipo para declarar e denir atributos 9.2 Atributos de objeto . . . . . . . . . . . . . 9.3 Atributos de classe (estáticos) . . . . . . . 9.3.1 Sentenças para atributos de classe .
André Duarte Bueno - www.lmpt.ufsc.br
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
60 61 62 62 62 62 63 63 64
67
67 67 70 70 70 72 73 73 74
79
79 79 84 86 88 88
91
91 91 92 93 94
95
. . . . acesso . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. 99 . 99 . 100 . 102
. . . .
. . . .
. . . .
95 96 96 97
99
Apostila de Programação em C++
SUMÁRIO 9.4 9.5 9.6 9.7 9.8
Atributos const . . . . . . . . . . . . . Atributos com mutable2 . . . . . . . . Atributos com volatile3 . . . . . . . . . Inicialização dos atributos da classe nos Sentenças para atributos . . . . . . . .
5 . . . . . . . . . . . . . . . . . . . . . . . . contrutores2 . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
10.1 Protótipo para declarar e denir métodos . . . . . . . . . . . . . . 10.2 Declaração, denição e retorno de um métodos . . . . . . . . . . . 10.2.1 Declaração de um método . . . . . . . . . . . . . . . . . . 10.2.2 Denição de um método . . . . . . . . . . . . . . . . . . . 10.2.3 Retorno de um método . . . . . . . . . . . . . . . . . . . . 10.3 Passagem dos parâmetros por cópia, por referência e por ponteiro 10.3.1 Uso de argumentos pré-denidos (inicializadores) . . . . . 10.3.2 Sentenças para declaração, denição e retorno de métodos 10.4 Métodos normais . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Métodos const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 Métodos estáticos . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7 Métodos inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8 Sentenças para métodos . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
10 Métodos
102 103 103 103 104
105
105 106 106 106 107 107 110 110 111 114 116 120 124
11 Sobrecarga de Métodos
125
12 Uso de Ponteiros e Referências
127
11.1 O que é a sobrecarga de métodos ? . . . . . . . . . . . . . . . . . . . . . . . . . . 125 11.2 Exemplos de sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 12.1 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Criação e uso de objetos dinâmicos com ponteiros . 12.2.1 Porque usar objetos dinâmicos ? . . . . . . . 12.2.2 Controle da criação e deleção de objetos com 12.3 Ponteiros const e ponteiros para const . . . . . . . 12.4 Conversão de ponteiros2 . . . . . . . . . . . . . . . 12.5 Ponteiro this . . . . . . . . . . . . . . . . . . . . . . 12.5.1 Sentenças para ponteiro this . . . . . . . . . 12.6 Usando auto_ptr2 . . . . . . . . . . . . . . . . . . 12.7 Ponteiros para métodos e atributos da classe3 . . . 12.8 Sentenças para ponteiros . . . . . . . . . . . . . . . 12.9 Referências (&) . . . . . . . . . . . . . . . . . . . . 12.9.1 Diferenças entre referência e ponteiro . . . . 12.9.2 Referências para ponteiros2 . . . . . . . . . 12.9.3 Sentenças para referências . . . . . . . . . .
13 Métodos Construtores e Destrutores
13.1 Protótipo para construtores e destrutores 13.2 Métodos construtores . . . . . . . . . . . 13.2.1 Sentenças para construtores . . . 13.3 Construtor default . . . . . . . . . . . .
André Duarte Bueno - www.lmpt.ufsc.br
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . . . . . . . . . . . ponteiros2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
127 129 129 131 131 132 133 133 133 136 136 137 137 138 138
141
141 141 142 143
Apostila de Programação em C++
SUMÁRIO
6 13.3.1 Sentenças para construtor default . . . . . 13.4 Construtor de cópia X(const X& obj) . . . . . . . 13.5 Métodos destrutores . . . . . . . . . . . . . . . . 13.5.1 Sentenças para destrutores . . . . . . . . . 13.5.2 Ordem de criação e destruição dos objetos 13.6 Sentenças para construtores e destrutores . . . . .
. . . . . .
. . . . . .
14 Herança 14.1 14.2 14.3 14.4
Protótipo para herança . . . . . . . . . . . . . . . . . Especicador de herança . . . . . . . . . . . . . . . . Chamando construtores da classe base explicitamente Ambigüidade . . . . . . . . . . . . . . . . . . . . . . 14.4.1 Senteças para herança . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
15 Herança Múltipla2
15.1 Protótipo para herança múltipla . . . . . . . . . . . . . . . . . 15.2 Herança múltipla . . . . . . . . . . . . . . . . . . . . . . . . . 15.3 Ambiguidade em herança múltipla . . . . . . . . . . . . . . . . 15.3.1 Herança múltipla com base comum . . . . . . . . . . . 15.4 Herança múltipla virtual2 . . . . . . . . . . . . . . . . . . . . 15.4.1 Sentenças para herança múltipla . . . . . . . . . . . . . 15.5 Ordem de criação e destruição dos objetos em heranças . . . . 15.5.1 Ordem de criação e destruição dos objetos em heranças 15.6 Redeclaração de método ou atributo na classe derivada . . . . 15.6.1 Sentenças para redeclarações . . . . . . . . . . . . . . . 15.7 Exemplo de herança simples e herança múltipla . . . . . . . . 15.8 Análise dos erros emitidos pelo compilador2 . . . . . . . . . .
16 Polimorsmo2
16.1 Métodos não virtuais (normais, estáticos) . . . . . . . 16.2 Métodos virtuais . . . . . . . . . . . . . . . . . . . . 16.2.1 Sentenças para métodos virtuais . . . . . . . . 16.3 Como implementar o polimorsmo . . . . . . . . . . 16.3.1 Sentenças para polimorsmo . . . . . . . . . . 16.4 Métodos virtuais puros (Classes abstratas)2 10.1 . . . 16.4.1 Sentenças para métodos virtuais puros (classes 16.5 Exemplo completo com polimorsmo . . . . . . . . .
17 Friend 17.1 17.2 17.3 17.4
Introdução ao conteito de friend Classes friend . . . . . . . . . . Métodos friend . . . . . . . . . Sentenças para friend . . . . . .
André Duarte Bueno - www.lmpt.ufsc.br
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . virtuais . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . abstratas) . . . . . . . . . .
. . . . . .
. . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
143 143 152 152 153 154
155
155 157 159 160 161
163
163 163 164 165 166 168 169 169 171 172 172 177
179
179 181 181 182 185 186 186 186
211
211 211 213 214
Apostila de Programação em C++
SUMÁRIO
7
18 Sobrecarga de Operador 18.1 18.2 18.3 18.4 18.5 18.6 18.7
Introdução a sobrecarga de operadores . . . . Operadores que podem ser sobrecarregados . . Sobrecarga de operador como função friend . . Sobrecarga de operador como método membro Sentenças para sobrecarga de operador . . . . Usar funções friend ou funções membro ? . . . Protótipos de sobrecarga . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . da classe . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
215
215 216 216 217 218 219 219
19 Implementando Associações em C++
227
20 Conversões
231
19.1 Introdução as associações em C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 227 19.2 Associação sem atributo de ligação . . . . . . . . . . . . . . . . . . . . . . . . . . 227 19.3 Associação com atributo de ligação . . . . . . . . . . . . . . . . . . . . . . . . . . 228 20.1 20.2 20.3 20.4 20.5 20.6 20.7
Protótipos para conversões . . . . . . . . . . . . . Necessidade de conversão . . . . . . . . . . . . . . Construtor de conversão2 . . . . . . . . . . . . . . Métodos de conversão (cast) . . . . . . . . . . . . Conversão explicita nos construtores com explicit2 Sentenças para construtor e métodos de conversão Conversão dinâmica com dynamic_cast . . . . . . 20.7.1 Sentenças para cast dinâmico . . . . . . . 20.8 Conversão estática com static_cast . . . . . . . . 20.9 Conversão com reinterpret_cast . . . . . . . . . . 20.10Usando Typeid . . . . . . . . . . . . . . . . . . . 20.11Vericação do tamanho de um objeto com sizeof . 20.12Referências e dynamic_cast . . . . . . . . . . . .
21 Excessões
21.1 Introdução as excessões . . . . . . . . . . . 21.2 Conceitos básicos de excessões . . . . . . . 21.2.1 try . . . . . . . . . . . . . . . . . . 21.2.2 throw . . . . . . . . . . . . . . . . 21.2.3 catch . . . . . . . . . . . . . . . . . 21.3 Sequência de controle . . . . . . . . . . . . 21.3.1 Sequência de controle sem excessão 21.3.2 Sequência de controle com excessão 21.4 Como ca a pilha (heap)2 . . . . . . . . . 21.5 Excessões não tratadas . . . . . . . . . . . 21.6 Excessão para new . . . . . . . . . . . . . 21.7 Excessões padrões . . . . . . . . . . . . . . 21.8 Sentenças para excessões . . . . . . . . . .
André Duarte Bueno - www.lmpt.ufsc.br
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
231 232 233 233 234 235 236 238 239 239 239 241 241
243
243 244 246 246 246 247 247 247 248 250 250 251 252
Apostila de Programação em C++
SUMÁRIO
8
22 Templates ou Gabaritos
22.1 Introdução aos templates (gabaritos) . . . . . . 22.2 Protótipo para templates . . . . . . . . . . . . . 22.2.1 Declaração explícita de função template 22.2.2 Sobrecarga de função template . . . . . . 22.2.3 Função template com objeto estático . . 22.3 Classes templates (ou tipos paramétricos) . . . 22.4 Sentenças para templates . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
255
255 255 257 257 257 257 257
III Classes Quase STL
259
23 Entrada e Saída com C++
261
23.1 Introdução a entrada e saída 23.1.1 Biblioteca de entrada 23.2 O que é um locale ? . . . . . 23.3 A classe
. . . . 23.4 A classe . . . . . . . 23.5 A classe . . . . 23.6 A classe . . . . . 23.7 A classe . . . . 23.8 A classe . . . . . 23.9 Sentenças para stream . . .
de dados no e saída . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
c++ . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . .
24 Entrada e Saída com Arquivos de Disco 24.1 24.2 24.3 24.4 24.5 24.6 24.7 24.8
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
Introdução ao acesso a disco . . . . . . . . . . . . . . . . . A classe . . . . . . . . . . . . . . . . . . . . . . Armazenando e lendo objetos . . . . . . . . . . . . . . . . Posicionando ponteiros de arquivos com seekg(), seekp(), tellg(),tellp()2 . . . . . . . . . . . . . . . . Acessando a impressora e a saída auxíliar3 . . . . . . . . . Arquivos de disco binários3 . . . . . . . . . . . . . . . . . . Executando e enviando comandos para um outro programa Redirecionamento de entrada e saída . . . . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
261 261 263 263 264 267 269 272 277 278
279
. . . . . . . . . . . . . 279 . . . . . . . . . . . . . 279 . . . . . . . . . . . . . 282 . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
286 287 288 288 289
25 class
293
26 class
301
27 class
305
IV Introdução a STL
311
28 Introdução a Biblioteca Padrão de C++ (STL)
313
25.1 Sentenças para strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
28.1 O que é a STL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
André Duarte Bueno - www.lmpt.ufsc.br
Apostila de Programação em C++
SUMÁRIO 28.1.1 Características da STL: . . . . . . . . . 28.1.2 Componentes da STL . . . . . . . . . . . 28.2 Introdução aos containers . . . . . . . . . . . . 28.2.1 Tipos de Container's . . . . . . . . . . . 28.2.2 Métodos comuns aos diversos container's 28.2.3 Typedef's para containers2 . . . . . . . . 28.3 Introdução aos iteradores (iterator's) . . . . . . 28.3.1 Tipos de iteradores . . . . . . . . . . . . 28.3.2 Operações comuns com iteradores2 . . .
9 . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
313 314 314 314 316 317 319 319 320
29 class
323
30 class
333
31 class
339
32 class
343
33 class
347
34 class
349
35 class
351
36 class
355
37 class