programacao orientada a objetos em c
TRANSCRIPT
-
8/2/2019 Programacao Orientada a Objetos Em C
1/625
LABORATRIO DE MEIOS POROSOS EPROPRIEDADES TERMOFSICAS
eNCLEO DE PESQUISA EM CONSTRUO
Apostila de Programao Orientada a Objeto em C++
Andr Duarte Bueno, UFSC-LMPT-NPChttp://www.lmpt.ufsc.br/~andre
email: [email protected] 0.4.5
12 de dezembro de 2002
http://www.lmpt.ufsc.br/~andre -
8/2/2019 Programacao Orientada a Objetos Em C
2/625
Apostila de Programao Orientada a Objeto em C++. Verso 0.4.5
Distribuda na forma GFDL (http://www.gnu.org/licenses/licenses.html#TOCFDL).Copyright (C) 2002 - Andr Duarte Bueno.Esta apostila textbook livre; voc pode redistribu-la e/ou modific-la sob os termos da Licena
Pblica de Documentos da GNU (GFDL), conforme publicada pela Free Software Foundation; verso1.2 da Licena como (a seu critrio) qualquer verso mais nova; preservando as sees no InvariantSections no Front-Cover Texts, and no Back-Cover Texts. Uma cpia da licena localizada no captuloGNU Free Documentation License.
Desenvolvida noLaboratrio de Meios Porosos e Propriedades Termofsicas (http://www.lmpt.ufsc.br)e no Ncleo de Pesquisa em Construo (http://www.npc.ufsc.br), com apoio doCurso de Ps-Graduao em Engenharia Mecnica (http://www.posmec.ufsc.br)e da Universidade Federal de Santa Catarina (http://www.ufsc.br).
2
http://www.ufsc.br/http://www.posmec.ufsc.br/http://www.npc.ufsc.br/http://www.lmpt.ufsc.br/http://www.gnu.org/licenses/licenses.html#TOCFDL -
8/2/2019 Programacao Orientada a Objetos Em C
3/625
Sumrio
I Filosofia e Modelagem Orientada a Objeto 39
1 Introduo a Programao Orientada a Objeto 411.1 Passado/Presente/Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.1.1 Passado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.1.2 Presente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.1.3 Futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.2 Exemplos de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.2.1 Um relgio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.2.2 Um programa de integrao numrica . . . . . . . . . . . . . . . . . . . . . . . 43
2 Conceitos Bsicos de POO 452.1 Abstrao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.2 Objeto (ou Instncia) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.3 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.4 Encapsulamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.5 Atributos (Propriedades/Variveis) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.6 Mtodos (Servios/Funes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.7 Herana (Hereditariedade) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.7.1 Herana simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.7.2 Herana mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.8 Polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3 Modelagem TMO/UML 513.1 Introduo a modelagem orientada a objeto . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2 Programas para desenho dos diagramas UML . . . . . . . . . . . . . . . . . . . . . . . 533.2.1 Diagramas UML usando o programa dia . . . . . . . . . . . . . . . . . . . . . . 533.3 Modelo de objetos Diagrama de classes . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3.1 Modelo de objetos Ligaes . . . . . . . . . . . . . . . . . . . . . . . . . . 543.3.2 Modelo de objetos Associaes . . . . . . . . . . . . . . . . . . . . . . . . . 553.3.3 Modelo de objetos Agregao . . . . . . . . . . . . . . . . . . . . . . . . . 563.3.4 Modelo de objetos Generalizao e Herana . . . . . . . . . . . . . . . . . . 583.3.5 Modelo de objetos Mdulo ou assunto . . . . . . . . . . . . . . . . . . . . . 58
3.4 Modelo dinmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.4.1 Modelo dinmico Diagrama de Eventos . . . . . . . . . . . . . . . . . . . . 59
3.4.2 Modelo dinmico Diagrama de Estado . . . . . . . . . . . . . . . . . . . . . 603.5 Modelo funcional2 Diagrama de atividade . . . . . . . . . . . . . . . . . . . . . . . 62
3
-
8/2/2019 Programacao Orientada a Objetos Em C
4/625
4 SUMRIO
3.6 UML Diagrama de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.7 UML Diagrama de pacotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.8 Testando o sistema com diagramas de objetos e de
colaborao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.8.1 UML Diagrama de colaborao . . . . . . . . . . . . . . . . . . . . . . . . 633.8.2 UML Diagrama de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
3.9 Verificando o projeto e a implementao com osdiagramas de componentes e de execuo . . . . . . . . . . . . . . . . . . . . . . . . . 643.9.1 UML Diagrama de componentes . . . . . . . . . . . . . . . . . . . . . . . . 643.9.2 UML Diagrama de execuo . . . . . . . . . . . . . . . . . . . . . . . . . . 64
II POO usando C++ 67
4 Introduo ao C++ 694.1 Um pouco de histria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.2 O que o Ansi C++? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694.3 Quais as novidades e vantagens de C++? . . . . . . . . . . . . . . . . . . . . . . . . . . 704.4 Tipos de programao em C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704.5 Seleo da plataforma de programao . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.5.1 Seleo do ambiente grfico - GDI (bibliotecas grficas) . . . . . . . . . . . . . 714.6 Ambientes de desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714.7 Compilar, linkar, debugar e profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754.8 Diferenas de nomenclatura (POO e C++) . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.9 Layout de um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.9.1 Arquivo de projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764.9.2 Arquivo de cabealho da classe (*.h) . . . . . . . . . . . . . . . . . . . . . . . . 764.9.3 Arquivo de implementao da classe (*.cpp) . . . . . . . . . . . . . . . . . . . 774.9.4 Arquivo de implementao da funo main (programa.cpp) . . . . . . . . . . . . 77
4.10 Exemplo de um programa orientado a objeto em C++ . . . . . . . . . . . . . . . . . . . 78
5 Conceitos Bsicos de C++ 815.1 Sobre a sintaxe de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815.2 Conceitos bsicos de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
5.3 Palavras chaves do C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.4 Nome dos objetos (identificadores) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.4.1 Conveno para nomes de objetos . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.5 Declaraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 875.5.1 Sentenas para declaraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885.5.2 Exemplos de declaraes2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.6 Definies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6 Tipos 936.1 Introduo ao conceito de tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936.2 Uso de tipos pr-definidos de C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936.3 Uso de tipos do usurio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
5/625
SUMRIO 5
6.4 Uso de tipos definidos em bibliotecas externas (STL) . . . . . . . . . . . . . . . . . . . 1006.5 Vantagem da tipificao forte do C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 1026.6 Sentenas para tipos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
7 Namespace 1057.1 O que um namespace ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057.2 Usando o espao de nomes da biblioteca padro de C++ (std) . . . . . . . . . . . . . . . 1057.3 Definindo um namespace2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067.4 Compondo namespace2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077.5 Sentenas para namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
8 Classes 1098.1 Prottipo para declarar e definir classes . . . . . . . . . . . . . . . . . . . . . . . . . . 1098.2 Encapsulamento em C++ usando o especificador de acesso . . . . . . . . . . . . . . . . 110
8.3 Classes aninhadas2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108.4 Sentenas para classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9 Atributos 1139.1 Prottipo para declarar e definir atributos . . . . . . . . . . . . . . . . . . . . . . . . . . 1139.2 Atributos de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139.3 Atributos de classe (estticos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
9.3.1 Sentenas para atributos de classe . . . . . . . . . . . . . . . . . . . . . . . . . 1159.4 Atributos const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169.5 Atributos com mutable2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
9.6 Atributos com volatile3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179.7 Inicializao dos atributos da classe nos contrutores2 . . . . . . . . . . . . . . . . . . . 1179.8 Sentenas para atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
10 Mtodos 11910.1 Prottipo para declarar e definir mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . 11910.2 Declarao, definio e retorno de um mtodo . . . . . . . . . . . . . . . . . . . . . . . 120
10.2.1 Declarao de um mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12010.2.2 Definio de um mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12010.2.3 Retorno de um mtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
10.2.4 Passagem dos parmetros por cpia, por referncia e por ponteiro . . . . . . . . 12110.2.5 Uso de argumentos pr-definidos (inicializadores) . . . . . . . . . . . . . . . . . 12410.2.6 Sentenas para declarao, definio e retorno de mtodos . . . . . . . . . . . . 124
10.3 Mtodos normais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12510.4 Mtodos const . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12810.5 Mtodos estticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13110.6 Mtodos inline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13410.7 Sentenas para mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
11 Sobrecarga de Mtodos 13911.1 O que a sobrecarga de mtodos ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13911.2 Exemplos de sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
6/625
6 SUMRIO
12 Uso de Ponteiros e Referncias 14112.1 Ponteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14112.2 Criao e uso de objetos dinmicos com ponteiros . . . . . . . . . . . . . . . . . . . . . 143
12.2.1 Porque usar objetos dinmicos ? . . . . . . . . . . . . . . . . . . . . . . . . . . 14312.2.2 Controle da criao e deleo de objetos com ponteiros2 . . . . . . . . . . . . . 145
12.3 Ponteiros const e ponteiros para const . . . . . . . . . . . . . . . . . . . . . . . . . . . 14612.4 Converso de ponteiros2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14712.5 Ponteiro this . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
12.5.1 Sentenas para ponteiro this . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14812.6 Usando auto_ptr2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14812.7 Ponteiros para mtodos e atributos da classe3 . . . . . . . . . . . . . . . . . . . . . . . 15112.8 Referncias (&) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
12.8.1 Diferenas entre referncia e ponteiro . . . . . . . . . . . . . . . . . . . . . . . 15112.8.2 Referncias para ponteiros2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15212.8.3 Sentenas para referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
13 Mtodos Construtores e Destrutores 15513.1 Prottipo para construtores e destrutores . . . . . . . . . . . . . . . . . . . . . . . . . . 15513.2 Mtodos construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
13.2.1 Sentenas para construtores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15613.3 Construtor default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
13.3.1 Sentenas para construtor default . . . . . . . . . . . . . . . . . . . . . . . . . 15713.4 Construtor de cpia X(const X& obj) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
13.4.1 Construtor de cpia e objetos dinmicos . . . . . . . . . . . . . . . . . . . . . . 163
13.5 Mtodos destrutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16613.5.1 Sentenas para destrutores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16613.5.2 Ordem de criao e destruio dos objetos . . . . . . . . . . . . . . . . . . . . . 167
13.6 Sentenas para construtores e destrutores . . . . . . . . . . . . . . . . . . . . . . . . . . 167
14 Herana 16914.1 Prottipo para herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16914.2 Especificador de herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17214.3 Chamando construtores da classe base explicitamente . . . . . . . . . . . . . . . . . . . 17314.4 Ambiguidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
14.5 Redeclarao de mtodo ou atributo na classe derivada . . . . . . . . . . . . . . . . . . 17514.5.1 Sentenas para redeclaraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17514.6 Sentenas para herana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
15 Herana Mltipla2 17715.1 Prottipo para herana mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17715.2 Herana mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17715.3 Ambiguidade em herana mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
15.3.1 Herana mltipla com base comum . . . . . . . . . . . . . . . . . . . . . . . . 17915.4 Herana mltipla virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18015.5 Sentenas para herana mltipla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18115.6 Ordem de criao e destruio dos objetos em heranas . . . . . . . . . . . . . . . . . . 183
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
7/625
SUMRIO 7
15.6.1 Ordem de criao e destruio dos objetos em heranas virtuais . . . . . . . . . 18315.7 Exemplo de herana simples e herana mltipla . . . . . . . . . . . . . . . . . . . . . . 18515.8 Anlise dos erros emitidos pelo compilador2 . . . . . . . . . . . . . . . . . . . . . . . . 189
16 Polimorfismo2 19316.1 Mtodos no virtuais (normais, estticos) . . . . . . . . . . . . . . . . . . . . . . . . . 19316.2 Mtodos virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
16.2.1 Sentenas para mtodos virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . 19516.3 Como implementar o polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
16.3.1 Sentenas para polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19916.4 Mtodos virtuais puros (Classes abstratas)2 . . . . . . . . . . . . . . . . . . . . . . . . 199
16.4.1 Sentenas para mtodos virtuais puros (classes abstratas) . . . . . . . . . . . . . 20016.5 Exemplo completo com polimorfismo . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
17 Friend 21717.1 Introduo ao conceito de friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21717.2 Classes fr iend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21817.3 Mtodos friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21917.4 Funes friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22017.5 Sentenas para friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
18 Sobrecarga de Operador 22118.1 Introduo a sobrecarga de operador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22118.2 Operadores que podem ser sobrecarregados . . . . . . . . . . . . . . . . . . . . . . . . 22218.3 Sobrecarga de operador como funo friend . . . . . . . . . . . . . . . . . . . . . . . . 22218.4 Sobrecarga de operador como mtodo membro da classe . . . . . . . . . . . . . . . . . 22318.5 Sentenas para sobrecarga de operador . . . . . . . . . . . . . . . . . . . . . . . . . . . 22418.6 Alguns prottipos de sobrecarga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
19 Implementando Associaes em C++ 23319.1 Introduo as associaes em C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23319.2 Associao sem atributo de ligao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23319.3 Associao com atributo de ligao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
20 Converses 237
20.1 Prottipos para converses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23720.2 Necessidade de converso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23820.3 Construtor de converso2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23920.4 Mtodos de converso (cast) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23920.5 Converso explicita nos construtores com explicit2 . . . . . . . . . . . . . . . . . . . . 24020.6 Sentenas para mtodos de converso . . . . . . . . . . . . . . . . . . . . . . . . . . . 24120.7 Converso dinmica com dynamic_cast . . . . . . . . . . . . . . . . . . . . . . . . . . 242
20.7.1 Sentenas para cast dinmico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24420.8 Converso esttica com static_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24420.9 Converso com reinterpret_cast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
20.10Usando Typeid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24520.11Verificao do tamanho de um objeto com sizeof . . . . . . . . . . . . . . . . . . . . . 247
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
8/625
8 SUMRIO
20.12Referncias e dynamic_cast. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
21 Excees2 24921.1 Introduo as excees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
21.2 Conceitos bsicos de excees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25021.2.1 try . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25221.2.2 throw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25221.2.3 catch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
21.3 Seqencia de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25321.3.1 Seqencia de controle sem exceo . . . . . . . . . . . . . . . . . . . . . . . . 25321.3.2 Seqencia de controle com exceo . . . . . . . . . . . . . . . . . . . . . . . . 253
21.4 Como fica a pilha (heap) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25421.5 Excees no tratadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25621.6 Exceo para new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
21.7 excees padres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25721.8 Sentenas para excees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
22 Templates ou Gabaritos 26122.1 Introduo aos templates (gabaritos) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26122.2 Prottipo para templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
22.2.1 Declarao explcita de funo template . . . . . . . . . . . . . . . . . . . . . . 26322.2.2 Sobrecarga de funo template . . . . . . . . . . . . . . . . . . . . . . . . . . . 26322.2.3 Funo template com objeto esttico . . . . . . . . . . . . . . . . . . . . . . . . 263
22.3 Classes templates (ou tipos paramtricos) . . . . . . . . . . . . . . . . . . . . . . . . . 263
22.4 Sentenas para templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
23 Entrada e Sada com C++ 26523.1 Introduo a entrada e sada de dados no C++ . . . . . . . . . . . . . . . . . . . . . . . 26523.2 Biblioteca de entrada e sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26523.3 O que um locale ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26623.4 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26723.5 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
23.5.1 Sentenas para . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27123.6 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
23.6.1 Sentenas para . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27323.7 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27323.7.1 Sentenas para . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
23.8 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27723.8.1 Sentenas para ostream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
23.9 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28123.10Sentenas para stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
24 Entrada e Sada com Arquivos de Disco 28324.1 Introduo ao acesso a disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28324.2 A classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28324.3 Armazenando e lendo objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
9/625
SUMRIO 9
24.4 Posicionando ponteiros de arquivos comseekg(), seekp(), tellg(),tellp()2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
24.5 Acessando a impressora e a sada auxiliar3 . . . . . . . . . . . . . . . . . . . . . . . . . 29424.6 Arquivos de disco binrios3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29424.7 Executando e enviando comandos para outro programa . . . . . . . . . . . . . . . . . . 29524.8 Redirecionamento de entrada e sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
25 class 29925.1 Introduo as strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29925.2 Mtodos de string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29925.3 Sentenas para strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
26 class 30726.1 Introduo a classe complex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
26.2 Mtodos de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
27 class 31127.1 Introduo a bitset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31127.2 Exemplos de use da classe bitset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
III Introduo a STL 317
28 Introduo a Biblioteca Padro de C++ (STL) 31928.1 O que a STL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
28.1.1 Caractersticas da STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31928.1.2 Componentes da STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
28.2 Introduo aos containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32028.2.1 Tipos de Containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32028.2.2 Mtodos comuns aos diversos containers . . . . . . . . . . . . . . . . . . . . . 32328.2.3 Typedefs para containers2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
28.3 Introduo aos iteradores (iterators) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32628.3.1 Tipos de iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32628.3.2 Operaes comuns com iteradores2 . . . . . . . . . . . . . . . . . . . . . . . . 326
29 class 32929.1 Sentenas para vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
30 class 33730.1 Sentenas para list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
31 class 343
32 class 347
33 class 351
34 class 355
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
10/625
10 SUMRIO
35 class 357
36 class 361
37 class 36337.1 pair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36337.2 map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36337.3 Sentenas para map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
38 class 371
39 Algoritmos Genricos 37339.1 Introduo aos algoritmos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37339.2 Classificao dos algoritmos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
39.2.1 Classificao quanto a modificao do container . . . . . . . . . . . . . . . . . 37339.2.2 Classificao quando as operaes realizadas . . . . . . . . . . . . . . . . . . . 37439.2.3 Classificao quanto a categoria dos iteradores . . . . . . . . . . . . . . . . . . 374
39.3 Funes genricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37539.3.1 Preenchimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37539.3.2 Comparao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37539.3.3 Remoo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37639.3.4 Trocas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37639.3.5 Misturar/Mesclar/Inverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37739.3.6 Pesquisar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37739.3.7 Ordenao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37839.3.8 Classificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37839.3.9 Transformao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37939.3.10 Matemticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37939.3.11 Operaes matemticas com conjuntos . . . . . . . . . . . . . . . . . . . . . . 38039.3.12 Heapsort (ordenao de pilhas) . . . . . . . . . . . . . . . . . . . . . . . . . . . 38039.3.13 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
40 Objetos Funes da STL 38740.1 Introduo aos objetos funes da STL . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
40.1.1 Funes aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
40.1.2 Funes de comparao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38840.1.3 Funes lgicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
IV Programao Para Linux/Unix 391
41 Introduo a Programao GNU/Linux, Unix 39341.1 Termos e conceitos utilizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39441.2 O bsico do GNU/Linux, Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
41.2.1 Comandos do shell teis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
41.2.2 Expresses regulares
3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40241.2.3 Programas telnet e ftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
11/625
SUMRIO 11
41.3 Diretrios teis para programadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40541.4 Programas teis para programadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
42 Edio de Texto Emacs e VI 409
42.1 Introduo ao editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40942.2 Comandos do editor emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
42.2.1 Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40942.2.2 Movimento do cursor (use as setas de direo) . . . . . . . . . . . . . . . . . . 41042.2.3 Cut/Copy/Paste/Undo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41042.2.4 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41142.2.5 Pesquisa e substituio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41142.2.6 Mltiplas janelas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41142.2.7 Encerrando seo do Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
42.3 Comandos do editor vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
43 Os programas diff, patch, indent 41543.1 O programa diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
43.1.1 Sentenas para o diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41743.2 O programa patch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41743.3 O programa indent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
44 Compilando com gcc, g++ 42144.1 Prottipo e parmetros do gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42144.2 Arquivos gerados pelo gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42244.3 Exemplo de uso do gcc/g++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42244.4 Sentenas para o compilador da gnu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
45 Make 42545.1 Um arquivo de projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42545.2 Prottipo e parmetros do make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42545.3 Formato de um arquivo Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
45.3.1 Criando variveis em um arquivo Makefile . . . . . . . . . . . . . . . . . . . . 42645.3.2 Criando alvos em um arquivo Makefile . . . . . . . . . . . . . . . . . . . . . . 427
45.4 Exemplo de um arquivo Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42745.5 Sentenas para o make . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
46 Bibliotecas 43146.1 Introduo a montagem de bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
46.1.1 ar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43146.1.2 ranlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43246.1.3 nm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43246.1.4 objdump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43346.1.5 ldd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43446.1.6 ldconfig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
46.2 Conveno de nomes para bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
46.3 Bibliotecas usuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43546.4 Montando uma biblioteca esttica (libNome.a) . . . . . . . . . . . . . . . . . . . . . . . 435
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
12/625
12 SUMRIO
46.4.1 Usando uma biblioteca esttica . . . . . . . . . . . . . . . . . . . . . . . . . . . 43646.5 Montando uma biblioteca dinmica (libNome.so) . . . . . . . . . . . . . . . . . . . . . 436
46.5.1 Usando uma biblioteca dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . 437
46.5.2 Vantagens/desvantagens da biblioteca dinmica . . . . . . . . . . . . . . . . . . 43846.6 Sentenas para bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
47 Libtool 44347.1 Introduo ao libtool2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44347.2 Forma de uso do libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44347.3 Criando uma biblioteca sem o libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44447.4 Criando uma biblioteca esttica com o libtool . . . . . . . . . . . . . . . . . . . . . . . 44447.5 Criando uma biblioteca dinmica com o libtool . . . . . . . . . . . . . . . . . . . . . . 44547.6 Linkando executveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
47.7 Instalando a biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44547.8 Modos do libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44647.9 Sentenas para o libtool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
48 Debug (Depuradores, Debuggers) 44948.1 Introduo ao debuger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44948.2 Comandos do gbd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44948.3 Exemplo de uso do gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44948.4 Sentenas para o gdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
49 Profiler (gprof)2 45149.1 Introduo ao gprof . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45149.2 Sentenas para o profiler: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
50 Verso de Depurao, Final e de Distribuio 45350.1 Verso debug, release e de distribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
50.1.1 Verso debug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45350.1.2 Verso final (release) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45350.1.3 Distribuio dos programas e bibliotecas . . . . . . . . . . . . . . . . . . . . . 453
50.2 Sentenas para distribuio de cdigo fonte . . . . . . . . . . . . . . . . . . . . . . . . 456
51 Documentao de Programas Usando Ferramentas GNU/Linux 45751.1 Introduo a documentao de programas . . . . . . . . . . . . . . . . . . . . . . . . . 45751.2 Documentao embutida no cdigo com JAVA_DOC . . . . . . . . . . . . . . . . . . . 457
51.2.1 Exemplo de cdigo documentado . . . . . . . . . . . . . . . . . . . . . . . . . 45751.2.2 Sentenas para documentao java_doc . . . . . . . . . . . . . . . . . . . . . . 458
51.3 Tutorial de configurao e uso do DOXYGEN . . . . . . . . . . . . . . . . . . . . . . . 45951.3.1 Exemplo de programa documentado . . . . . . . . . . . . . . . . . . . . . . . . 46151.3.2 Exemplo de diagramas gerados pelo doxygen . . . . . . . . . . . . . . . . . . . 463
51.4 Documentao profissional com sgml/xml (LYX) . . . . . . . . . . . . . . . . . . . . . 464
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
13/625
SUMRIO 13
52 Seqencia de Montagem de Um Programa GNU2 46752.1 Introduo a programao multiplataforma com GNU . . . . . . . . . . . . . . . . . . . 46752.2 aclocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46952.3 ifnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46952.4 autoscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
52.4.1 Roteiro do autoscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47052.5 autoheader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
52.5.1 Roteiro do autoheader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47052.6 automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
52.6.1 Introduo ao automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47152.6.2 Sentenas para o automake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
52.7 autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47452.7.1 Introduo ao autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47452.7.2 Prottipo do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
52.7.3 Roteiro do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47552.7.4 Estrutura de um arquivo configure.in . . . . . . . . . . . . . . . . . . . . . . . . 47552.7.5 Exemplo de um arquivo configure.in . . . . . . . . . . . . . . . . . . . . . . . . 47652.7.6 Macros do autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47652.7.7 Como aproveitar os resultados das pesquisas realizadas pelo
autoconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47952.7.8 Variveis definidas no arquivo configure.in e que sero substitudas no arquivo
Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48152.8 autoreconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48252.9 ./configure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483
52.10Como incluir instrues do libtool em seu pacote gnu . . . . . . . . . . . . . . . . . . . 48352.10.1 Exemplo de arquivo makefile.am usando o libtool . . . . . . . . . . . . . . . . . 48452.10.2 Exemplo de arquivo configure.in usando o libtool . . . . . . . . . . . . . . . . . 484
52.11Exemplo Completo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484
53 Introduo ao Controle de Verses Com o CVS 48953.1 O que o CVS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48953.2 Comandos do cvs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49053.3 Seqencia de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
53.3.1 Roteiro para criar um repositrio . . . . . . . . . . . . . . . . . . . . . . . . . 492
53.3.2 Para importar os arquivos de seu projeto antigo para dentro do repositrio . . . . 49353.3.3 Para baixar o projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49453.3.4 Para criar mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49553.3.5 Para adicionar/remover arquivos e diretrios . . . . . . . . . . . . . . . . . . . . 49653.3.6 Para atualizar os arquivos locais . . . . . . . . . . . . . . . . . . . . . . . . . . 499
53.4 Verses, tags e releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50053.4.1 Entendendo as verses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50053.4.2 Para criar tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50053.4.3 Para criar releases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50253.4.4 Recuperando mdulos e arquivos . . . . . . . . . . . . . . . . . . . . . . . . . 503
53.5 Para verificar diferenas entre arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 50453.6 Verificando o estado do repositrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
14/625
14 SUMRIO
53.6.1 Histrico das alteraes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50553.6.2 Mensagens de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50553.6.3 Anotaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50653.6.4 Verificando o status dos arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . 506
53.7 Ramos e Misturas (Branching and Merging) . . . . . . . . . . . . . . . . . . . . . . . . 50753.7.1 Trabalhando com ramos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50753.7.2 Mesclando 2 verses de um arquivo . . . . . . . . . . . . . . . . . . . . . . . . 50853.7.3 Mesclando o ramo de trabalho com o ramo principal . . . . . . . . . . . . . . . 508
53.8 Configurao do cvs no sistema cliente-servidor3 . . . . . . . . . . . . . . . . . . . . . 50953.8.1 Variveis de ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
53.9 Como baixar programas de terceiros usando o cvs . . . . . . . . . . . . . . . . . . . . . 51053.10Frontends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51053.11Sentenas para o cvs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51253.12Um diagrama com os comandos do cvs . . . . . . . . . . . . . . . . . . . . . . . . . . 512
V Etapas para Desenvolvimento de um Programa 513
54 Etapas de Desenvolvimento de um Programa 51554.1 Especificao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51654.2 Anlise orientada a objeto (AOO)2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51754.3 Modelagem de objetos2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
54.3.1 Identificao de assuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51754.3.2 Identificao de classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
54.3.3 Identificao de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51854.3.4 Identificao de associaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51954.3.5 Identificao de atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51954.3.6 Identificao de heranas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52054.3.7 Identificao de mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52154.3.8 Iterao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
54.4 Modelagem dinmica2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52254.4.1 Formao de interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52254.4.2 Identificao de eventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52254.4.3 Preparao de um cenrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522
54.4.4 Construa um diagrama de estados . . . . . . . . . . . . . . . . . . . . . . . . . 52354.5 Modelagem funcional3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52354.6 Projeto do sistema2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524
54.6.1 Interface interativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52454.6.2 Simulao dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52454.6.3 Identificao de subsistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52554.6.4 Identificao de concorrncias . . . . . . . . . . . . . . . . . . . . . . . . . . . 52554.6.5 Identificao de depsitos de dados . . . . . . . . . . . . . . . . . . . . . . . . 52554.6.6 Identificao e alocao dos recursos globais, das condies extremas e de prio-
ridades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525
54.6.7 Identificao e seleo da implementao de controle . . . . . . . . . . . . . . . 52654.6.8 Identificao das estruturas arquitetnicas comuns . . . . . . . . . . . . . . . . 526
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
15/625
SUMRIO 15
54.7 Projeto orientado a objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52654.7.1 Projeto e especificao do controle . . . . . . . . . . . . . . . . . . . . . . . . . 52754.7.2 Efeitos do projeto nos mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . 52754.7.3 Efeitos do projeto nas heranas . . . . . . . . . . . . . . . . . . . . . . . . . . . 52754.7.4 Efeitos do projeto nas associaes . . . . . . . . . . . . . . . . . . . . . . . . . 52854.7.5 Efeitos do projeto nos atributos de ligao . . . . . . . . . . . . . . . . . . . . . 52854.7.6 Efeitos do projeto na seleo de algoritmos . . . . . . . . . . . . . . . . . . . . 52854.7.7 Efeitos do projeto na seleo da estrutura de dados . . . . . . . . . . . . . . . . 52954.7.8 Efeitos do projeto na otimizao do software . . . . . . . . . . . . . . . . . . . 529
54.8 Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52954.9 Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52954.10Documentao de um programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529
54.10.1 Documentao do sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53054.10.2 Documentao dos assuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530
54.10.3 Documentao das classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53054.10.4 Documentao das relaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53154.10.5 Documentao dos atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53154.10.6 Documentao dos mtodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
54.11Manuteno3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
Referncias Bibliogrficas 535
VI Apndices 539
A Diretrizes de Pr-Processador 541A.1 Introduo as diretrizes de pr processador . . . . . . . . . . . . . . . . . . . . . . . . . 541A.2 Compilao condicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
A.2.1 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541A.2.2 if...else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542A.2.3 if...elif...elif...endif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542A.2.4 define, ifdef, ifndef, undef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542A.2.5 Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
B Conceitos teis Para Programao em C 545
B.1 Classes de armazenamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545B.2 Modificadores de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546B.3 Escopo das variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549B.4 Sentenas para classes de armazenamento,
escopo e modificadores de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
C Operadores 553C.1 Introduo aos operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553C.2 Operadores de uso geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
C.2.1 Operadores aritmticos (+,-,*,/,%) . . . . . . . . . . . . . . . . . . . . . . . . . 554
C.2.2 Operadores de atribuio (=) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554C.2.3 Operadores compostos (+=, -=, *=, /=) . . . . . . . . . . . . . . . . . . . . . . . 554
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
16/625
16 SUMRIO
C.2.4 Operadores relacionais (>, >=,
-
8/2/2019 Programacao Orientada a Objetos Em C
17/625
SUMRIO 17
G.1.3 Acessando atributos de uma estrutura . . . . . . . . . . . . . . . . . . . . . . . 592G.1.4 Estruturas e funes2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594G.1.5 Estruturas aninhadas2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594G.1.6 Sentenas para estruturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594
G.2 Unies (union) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595G.3 Enumeraes (enumerated) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597
H Bibliotecas de C 599H.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599
I Portabilidade 601I.1 Introduo a portabilidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601I.2 Sentenas para desenvolver programas portveis . . . . . . . . . . . . . . . . . . . . . . 601
J Bug / Debug 603J.1 O que um bug? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603J.2 O que debugar um programa? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604J.3 Uso de assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604J.4 Sentenas para evitar bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
K Glossrio 607
L Links Para Sites em C++ 617L.1 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
18/625
18 SUMRIO
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
19/625
Lista de Figuras
1 Por onde comear ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1 Tela do programa with class. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.2 O programa DIA manipulando uma estrutura UML com representaes de classes. . . . 543.3 Um pequeno help para uso do DIA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.4 Diagrama de classes representando classes. . . . . . . . . . . . . . . . . . . . . . . . . 563.5 Diagrama de classes representando uma ligao. . . . . . . . . . . . . . . . . . . . . . . 563.6 Diagrama de classes representando associaes. . . . . . . . . . . . . . . . . . . . . . . 573.7 Diagrama de classes representando agregaes. . . . . . . . . . . . . . . . . . . . . . . 573.8 Diagrama de classes representando heranas. . . . . . . . . . . . . . . . . . . . . . . . 583.9 Diagrama de eventos (de sequncia). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.10 Diagrama de estado e os diferentes tipos de mensagens. . . . . . . . . . . . . . . . . . . 603.11 Diagrama de atividade, o que ocorre dentro de um mtodo. . . . . . . . . . . . . . . . . 623.12 Diagrama de caso de uso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.13 Diagrama de pacotes, assuntos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.14 Diagrama de colaborao. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.15 Diagrama de objetos, instncias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.16 Diagrama de componentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.17 Diagrama de execuo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653.18 Outros elementos da UML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.1 A tela do Dev C++ (http://www.bloodshed.net/dev/devcpp.html). . . . . . . . . . 734.2 A tela do kdevelop (http://www.kdevelop.org). . . . . . . . . . . . . . . . . . . . . 744.3 Seqencia de gerao do programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
5.1 Compilando e executando programas no Shell. . . . . . . . . . . . . . . . . . . . . . . . 91
6.1 Tipos de dados e dimenses (sizeof). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
9.1 Como fica o objeto b na memria. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1149.2 Como fica o objeto na memria quando a classe tem atributos estticos. . . . . . . . . . 116
10.1 A classe TPessoa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12610.2 A classe TPonto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
12.1 Como declarar e usar um ponteiro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.1 A classe TAluno. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
19
http://www.kdevelop.org/http://www.bloodshed.net/dev/devcpp.html -
8/2/2019 Programacao Orientada a Objetos Em C
20/625
20 LISTA DE FIGURAS
14.1 A herana entre TPonto e TCirculo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
15.1 Herana mltipla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17815.2 Como ficam os objetos b1, b2 e d em uma herana mltipla. . . . . . . . . . . . . . . . 178
15.3 Herana mltipla com base comum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17915.4 Como ficam os objetos b0, b1, b2 e d em uma herana mltipla com base comum. . . . . 18015.5 Herana mltipla virtual. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18115.6 Como ficam os objetos b0, b1, b2 e d em uma herana mltipla com base B0 virtual. . . 18215.7 Seqncia de construo e destruio dos objetos em uma herana. . . . . . . . . . . . . 18315.8 Hierarquia com herana mltipla normal e virtual. . . . . . . . . . . . . . . . . . . . . . 18415.9 Hierarquia de classes TPonto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
16.1 Ilustrao da ligao dinmica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19616.2 Hierarquia TPessoa, TAluno, TFuncionario, TAlunoFuncionario. . . . . . . . . . . . . . 200
23.1 Diagrama UML da biblioteca de manipulao de entrada e sada. . . . . . . . . . . . . . 266
28.1 Containers seqenciais (vector, list, deque). . . . . . . . . . . . . . . . . . . . . . . . . 32028.2 Containers associativos (set, multiset, map, multimap). . . . . . . . . . . . . . . . . . . 32228.3 Mtodos comuns aos diversos containers. . . . . . . . . . . . . . . . . . . . . . . . . . 32528.4 Mtodos que retornam iteradores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
29.1 Mtodos disponibilizados para vector. . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
30.1 Mtodos disponibilizados para list. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
31.1 Mtodos disponibilizados para deque. . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
32.1 Mtodos disponibilizados para stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
33.1 Container queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
35.1 Mtodos disponibilizados para set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
36.1 Mtodos disponibilizados para multiset. . . . . . . . . . . . . . . . . . . . . . . . . . . 361
37.1 Mtodos disponibilizados para map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
42.1 O editor de texto emacs (observe o tem de menu C++). . . . . . . . . . . . . . . . . . . 413
51.1 Ilustrao da hierarquia TMatriz da biblioteca LIB_LMPT. . . . . . . . . . . . . . . . . 46351.2 Ilustrao da hierarquia da classe TRotulador3D da biblioteca LIB_LMPT. . . . . . . . . 46451.3 Ilustrao das dependncias do arquivo TRotulador3D. . . . . . . . . . . . . . . . . . . 46551.4 O site do LYX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
53.1 Verses de um arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50053.2 Criando um tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50153.3 Criando um release. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50253.4 Como ficam os ramos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50753.5 Um frontend para o cvs no GNU/Linux, Unix (o cervisia). . . . . . . . . . . . . . . . . 510
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
21/625
Lista de Figuras 21
53.6 Um frontend para o cvs no Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . 51153.7 Diagrama com os comandos do cvs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
54.1 Diversas etapas de desenvolvimento de um software e os documentos gerados. . . . . . . 516
J.1 Um bug. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
22/625
22 Lista de Figuras
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
23/625
Lista de Tabelas
1 Arquivos da apostila. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.1 Extenses usuais dos arquivos nas diferentes plataformas. . . . . . . . . . . . . . . . . . 754.2 Diferenas na nomenclatura da POO e de C++. . . . . . . . . . . . . . . . . . . . . . . 76
5.1 Palavras chaves do ANSI C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855.2 Conveno para nomes de objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.3 Exemplos de declaraes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1 Tipos e intervalos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.2 Diferenas de tamanho dos objetos padres de C++ nas plataformas de 16 e 32 bits. . . . 95
12.1 Converso de ponteiros objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
14.1 Acesso herdado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
16.1 Mtodos com ligao esttica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19316.2 Mtodos com ligao dinmica. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
18.1 Operadores que podem ser sobrecarregados. . . . . . . . . . . . . . . . . . . . . . . . . 222
23.1 Flags para o mtodo setf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26723.2 Manipuladores da . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27223.3 Caracteres de escape. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
24.1 Modos de abertura do mtodo open. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28424.2 Modos de proteo do mtodo open (atributos de arquivo). . . . . . . . . . . . . . . . . 28424.3 Manipuladores seekdir para os mtodos seekp e seekg. . . . . . . . . . . . . . . . . . . 292
28.1 Iteradores e posio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
41.1 Diretrios importantes para o programador. . . . . . . . . . . . . . . . . . . . . . . . . 40541.2 Programas teis para desenvolvedores de software no ambiente GNU/Linux. . . . . . . . 407
46.1 Bibliotecas usuais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
48.1 Comandos do gdb. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450
52.1 Sequncia executada pelo programador para montagem de programas multi-plataforma
usando o padro GNU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46852.2 Sequncia executada pelo usurio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
23
-
8/2/2019 Programacao Orientada a Objetos Em C
24/625
24 Lista de Tabelas
C.1 Precedncia dos operadores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
25/625
Listings
1 Exemplo de um listing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1 Exemplo bsico - Arquivo TAplicacao.h. . . . . . . . . . . . . . . . . . . . . . . . . . . 784.2 Exemplo bsico - Arquivo TAplicacao.cpp. . . . . . . . . . . . . . . . . . . . . . . . . 784.3 Exemplo bsico - Arquivo programa.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . 795.1 Usando sada para tela e nova linha. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845.2 Declarao de objetos e uso de cin e cout. . . . . . . . . . . . . . . . . . . . . . . . . . 896.1 Tipos numricos de C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.2 Diferenas no uso de inteiro com sinal (signed) e sem sinal (unsigned). . . . . . . . . . . 966.3 Exemplo preliminar de definio de classe do usurio. . . . . . . . . . . . . . . . . . . . 986.4 Exemplo preliminar de uso da classe vector da biblioteca STL . . . . . . . . . . . . . . 1007.1 Definindo e usando um namespace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10610.1 Passando parmetros por valor, referncia e ponteiro. . . . . . . . . . . . . . . . . . . . 12210.2 Classe com atributo e mtodo normal. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12510.3 Classe com atributo e mtodo const. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12810.4 Classe com atributo e mtodo esttico. . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
10.5 Arquivo e87-TPonto.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13510.6 Arquivo e87-TPonto.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13610.7 Uso de mtodos e atributos de uma classe. . . . . . . . . . . . . . . . . . . . . . . . . . 13712.1 Uso de ponteiros para criar e usar objetos dinmicos. . . . . . . . . . . . . . . . . . . . 14412.2 Comparando o uso de vetores estticos de C, dinmicos de C++, com auto_ptr de C++ e
vector da stl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14812.3 Uso de referncia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15113.1 Uso de construtor default e de copia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15813.2 Uso indevido do construtor de cpia em objetos com atributos dinmicos. . . . . . . . . 16314.1 Arquivo e87-TCirculo.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
14.2 Arquivo e87-TCirculo.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17114.3 Erro ao definir duas vezes o construtor default (Arquivo e101-ambiguidade.cpp). . . . . 17415.1 Sequncia de construo e destruio em herana mltipla virtual. . . . . . . . . . . . . 18315.2 Arquivo e87-TElipse.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18615.3 Arquivo e87-TElipse.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18615.4 Arquivo e87-Programa.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18715.5 Arquivo e87-TCirculoElipse.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18915.6 Arquivo e87-TCirculoElipse.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19015.7 Exemplo de mensagem de erro emitida pelo compilador g++ (no GNU/Linux) - Arquivo
e87-TCirculoElipse.msg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
16.1 Exemplo de uso do polimorfismo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19716.2 Arquivo TPessoa.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
25
-
8/2/2019 Programacao Orientada a Objetos Em C
26/625
26 Lista de Programas
16.3 Arquivo TPessoa.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20216.4 Arquivo TAluno.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20316.5 Arquivo TAluno.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20416.6 Arquivo TFuncionario.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20516.7 Arquivo TFuncionario.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20716.8 Arquivo TAlunoFuncionario.h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20816.9 Arquivo TAlunoFuncionario.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20916.10Arquivo e93-class-Heranca-Multipla.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . 21016.11Arquivo makefile para exerccios e91, e92, e93. . . . . . . . . . . . . . . . . . . . . . . 21416.12Sada gerada pelo makefile dos exerccios e91, e92, e93. . . . . . . . . . . . . . . . . . 21517.1 Usando mtodos e classes friend. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21818.1 Arquivo e89-TPonto.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22518.2 Arquivo e89-TPonto.cpp, testando a sobrecarga de operador. . . . . . . . . . . . . . . . 22718.3 Arquivo e89-Programa.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
20.1 Uso de construtor com explicit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24020.2 Uso do dynamic-cast, typeid e excees. . . . . . . . . . . . . . . . . . . . . . . . . . . 24320.3 Uso de typeid. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24521.1 Excesso: Diviso por zero. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24921.2 Excesso: Diviso por zero com controle simples. . . . . . . . . . . . . . . . . . . . . . 24921.3 Excesso: Diviso por zero com excees. . . . . . . . . . . . . . . . . . . . . . . . . . 25121.4 Exceo e desempilhamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25421.5 Exceo para new. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25623.1 Formatao bsica da sada de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . 26923.2 Formatao da sada de dados usando iomanip. . . . . . . . . . . . . . . . . . . . . . . 271
23.3 Formatao da sada de dados usando iomanip. . . . . . . . . . . . . . . . . . . . . . . 27723.4 Uso de sstream (ostringstream e istringstream). . . . . . . . . . . . . . . . . . . . . . . 28124.1 Uso de stream de disco (ifstream e ofstream) para escrever e ler em arquivos de disco. . . 28424.2 Lendo um arquivo com dados e comentrios. . . . . . . . . . . . . . . . . . . . . . . . 28624.3 Leitura e gravao de objetos simples usando read/write. . . . . . . . . . . . . . . . . . 28824.4 Usando read,write e seekg. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29224.5 Executando e enviando comandos para um outro programa (com opfstream). . . . . . . . 29524.6 Usando redirecionamento de arquivo. . . . . . . . . . . . . . . . . . . . . . . . . . . . 29725.1 Uso da classe string de C++. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30025.2 Uso de string e sstream para executar um programa do shell. . . . . . . . . . . . . . . . 304
26.1 Uso de complex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30927.1 Usando bitset - Exemplo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31127.2 Usando bitset - Exemplo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31427.3 Usando bitset com vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31529.1 Usando vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33430.1 Usando list. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34031.1 Usando deque. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34432.1 Usando stack. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34833.1 Usando queue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35235.1 Usando set. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
37.1 Usando map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36639.1 Usando algoritmos genricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Andr Duarte Bueno - www.lmpt.ufsc.br Apostila de Programao em C++
-
8/2/2019 Programacao Orientada a Objetos Em C
27/625
Lista de Programas 27
39.2 Usando vector com algoritmos genricos . . . . . . . . . . . . . . . . . . . . . . . . . . 38340.1 Usando functional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38843.1 Arquivo e06a-hello.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41543.2 Arquivo e06b-hello.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41643.3 Arquivo diff. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41643.4 Arquivo diff -c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41643.5 Arquivo diff -u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41743.6 Arquivo ex-vector-1-indent.cpp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41945.1 Arquivo makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42745.2 Exemplo de uso do programa make. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42846.1 Sada do comando ar - -help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43246.2 Sada do comando nm help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43346.3 Sada do comando ldd /usr/bin/lyx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43446.4 Arquivo makefile com bibliotecas estticas e dinmicas. . . . . . . . . . . . . . . . . . . 438
46.5 Arquivo mostrando o uso do makefile. . . . . . . . . . . . . . . . .