Programacao Orientada a Objetos Em C

download Programacao Orientada a Objetos Em C

of 626

Transcript of Programacao Orientada a Objetos Em C

  • 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. . . . . . . . . . . . . . . . .