(Parte 1 de 6)

C / C++ e Orientação a

Objetos em Ambiente Multiplataforma

Por: Sergio Barbosa Villas-Boas, Ph.D.

Professor Adjunto do DEL - Departamento de Eletrônica e Computação da UFRJ. (w.del.ufrj.br)

Resumo do Currículo:

w.crie.coppe.ufrj.br/mbkm/2000MBA em Inteligência Empresarial e Gestão do Conhecimento (MBKM) w.chiba-u.ac.jp1998Ph.D.em EngenhariadeControlepor Chiba University -Japão w.coep.ufrj.br1991M.Sc.em Engenharia Elétrica pelaCOPPE - PEE -Controle w.del.ufrj.br1987Engenheiro Eletrônico peloDEL, UFRJ w.cefet-rj.br1981Técnico Eletrônico pelo CEFET-RJ w.crie.coppe.ufrj.br/mbkm/2000MBA em Inteligência Empresarial e Gestão do Conhecimento (MBKM) w.chiba-u.ac.jp1998Ph.D.em EngenhariadeControlepor Chiba University -Japão w.coep.ufrj.br1991M.Sc.em Engenharia Elétrica pelaCOPPE - PEE -Controle w.del.ufrj.br1987Engenheiro Eletrônico peloDEL, UFRJ w.cefet-rj.br1981Técnico Eletrônico pelo CEFET-RJ

Email do Autor: villas@kmail.com.br

URL do Autor: w.del.ufrj.br/~villas

URL do Livro: w.del.ufrj.br/~villas/livro_c++.html

Versão do Livro: 5.1, de 17 de Agosto de 2001

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 2 Índice

Índice2
Capítulo 1) Introdução17
1.1 Prefácio17
1.2 Histórico do livro19
1.3 Escolha de uma tecnologia: uma decisão estratégica20
1.4 Mercadoria e produto diferenciado24
1.5 Sociedade do conhecimento25

1.3.1 Características do produto “software” 21 1.3.2 Incorporação de novidades 2 1.4.1 Mercadoria escassa 24 1.5.1 Mudança do paradigma de negócios 26 1.5.2 “Mercadorização” 26

1.6 Porque C/C++ ?27
1.7 Breve história do C/C++30
1.8 Qualidades da Linguagem C/C++31
1.9 Classificação de interfaces de programas32
1.10 Programando para console32
1.1 Linguagens de programação de computador3

1.5.3 Remuneração × agregação de valor na cadeia produtiva 27 1.6.1 “Tribos” de tecnologia 27 1.6.2 A escolha tecnológica é uma escolha estratégica 28

Capítulo 2) Conheça o Seu Compilador35
2.1 Visual C++ 6.035
2.1.2.1 Adicionando argumentos para a linha de comando4

1.1.1 Alto nível × baixo nível 3 2.1.1 Reconhecendo o Compilador 35 2.1.2 “Hello world” para DOS 41 2.1.3 Usando o Help 45 2.1.4 Projetos (programas com múltiplos fontes) 46 2.1.5 Bibliotecas 46

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

2.1.5.1 Fazer uma biblioteca46
2.1.5.2 Incluir uma biblioteca num projeto48
2.1.5.3 Examinar uma biblioteca48
2.1.7.1 Acrescentando Lib no Project Settings49
2.1.7.2 Class View50
2.1.7.3 Usando bibliotecas de ligação dinâmica (DLL)51
2.1.7.4 DLL para Windows5
2.1.7.5 Otimização do linker para alinhamento de código5
2.2 Borland C++ builder 5.056
2.2.2.1 Adicionando argumentos para a linha de comando59
2.3 C++ for win32 gratuito60

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 3 2.1.6 Debug 48 2.1.7 Dicas extras 49 2.1.8 Detectando vazamento de memória 5 2.2.1 Reconhecendo o Compilador 57 2.2.2 “Hello world” para DOS 57 2.3.1 Ming (da GNU) 60

Livro patrocinado, que história é essa ?

Vivemos atualmente num mundo conectado e globalizado. Há tecnologia de sobra para copiar conhecimentos em praticamente qualquer forma que possa ser registrado. Portanto, tentar bloquear a cópia do texto pode ser um trabalho de “remar contra a maré”.

Optei por disponibilizar gratuitamente a versão em PDF desse texto. Ao faze-lo, investigo um modelo de negócios que pode ser o mais adequado ao ambiente atual. O autor do texto pode doar seu material se quiser, e é o que estou fazendo. Mas ao faze-lo, a atividade de dar autoria ao texto torna-se obviamente não remunerada. Então que estímulo teria o autor em fazer o texto ? Resposta: usa-se o texto como veículo para mensagens de patrocinadores. Isso é feito nesses quadros, inseridos nas páginas de índice.

Esse livro não está pronto ainda. Há trechos por melhorar, e outros a acrescentar. Procure por novas versões a cada início de semestre.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 4

2.4 g++ (do unix)60
2.4.1.1 Adicionando argumentos para a linha de comando61
2.4.4.1 Incluir uma biblioteca num projeto62
2.4.4.2 Fazer uma biblioteca62
2.4.4.3 Examinar uma biblioteca62
2.4.5.1 Instalando uma biblioteca dinâmica64
2.4.8.1 rpm binário e rpm com fonte6
2.4.8.2 Alguns comandos do rpm6

2.3.2 djgpp 60 2.4.1 “Hello world” 61 2.4.2 Usando o Help 61 2.4.3 Projetos (programas com múltiplos fontes) 61 2.4.4 Bibliotecas 62 2.4.5 Fazendo uma biblioteca usando libtool 63 2.4.6 Debug 65 2.4.7 Definindo um identificador para compilação condicional 65 2.4.8 O pacote RPM do linux 6

Patrocine essa publicação

Público Alvo: Profissionais e estudantes de tecnologia de informação.

Circulação: Esse texto é literatura recomendada para cerca de 100 alunos por ano (circulação mínima). Considerando as versões anteriores do livro, pelo menos 200 alunos já usaram esse texto. Os alunos são usuários influenciadores, que mostram o material em empresas que trabalham. Na página web do livro há uma lista de interessados em receber notícia sobre novas versões do livro. O número de pessoas que deseja receber notícias sobre o livro é mostrado na página web. Sendo que o formato do livro em PDF pode ser copiado livremente, não há registro de quantas cópias estão efetivamente em circulação, mas é seguramente muito mais que o número de pessoas mostrado na página web do livro.

Periodicidade: A cada semestre, o texto é atualizado e melhorado. A nova versão corrente do texto pode sempre ser copiada a partir da página web. A próxima versão está programada para início de 2002.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

2.4.8.3 Construindo um rpm67
2.4.8.3.1 I ntrodução67
2.4.8.3.2 O header68
2.4.8.3.3 Prepara ção (prep)69
Capítulo 3) Princípios de C/C++70
3.1 O primeiro programa70
3.2 F ormato livre70
3.3 Chamada de função70
3.4 Declaração e definição de funções71
3.5 Comentários71
3.6 I dentificador72
3.7 Constantes literais72
3.8 Escopo72
3.9 Tipos de dados padrão (Standard Data Types)73
3.10 Palavras reservadas do C++ (keywords)74
3.1 Letras usadas em pontuação74
3.12 Letras usadas em operadores74

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 5

Surgiram oportunidades profissionais ? lembre-se do autor ! http://www.del.ufrj.br/~villas

O primeiro patrocinador é o autor, cujos dados de contato estão divulgados no texto. Espero ser lembrado pelos leitores em consultorias, projetos, cursos ou empreendimentos que surjam, no ambiente profissional sempre em grande mutação.

Como membro da comunidade acadêmica, sou entusiasta defensor de uma parceria tipo “ganha-ganha” entre universidade e empresas privadas ou públicas. Acredito que implantar com sucesso esse tipo de parceria é fator essencial de desenvolvimento econômico e social. Qualquer país precisa muito disso. No caso do Brasil, a necessidade de que a inteligência das universidades seja traduzida em desenvolvimento econômico e bem estar social é evidente e urgente.

Veja slides desse livro na web em http://del.ufrj.br/~villas/slides.html

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Capítulo 4) Estrutura do Compilador75
4.1 Entendendo o Compilador75
4.2 Protótipos (prototypes)76
4.3 Projetos em C/C++7
4.4 Header Files (*.h)79
4.5 B iblioteca (library)79
4.6 Regras do compilador82
Capítulo 5) Fundamentos de C /C++84
5.1 Chamada de função por referência e por valor84
5.2 Tipos de dados definidos pelo programador85
5.3 Maquiagem de tipos (type casting)85
5.4 Opera ções matemáticas86
5.5 Controle de fluxo do programa86
5.6 Ex ecução condicional87
5.7 L aços (loop) de programação87

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 6 4.5.1 Utilizando Bibliotecas prontas 80 4.5.2 Fazendo bibliotecas 80

Balico – o mercado de trabalho na web http://www.balico.com.br

O Balico é um sistema na web para cadastrar profissionais a procura de emprego, e empresas com ofertas de emprego.

O sistema permite o cadastro imediato e gratuito tanto de empresas quanto de profissionais. Formulários específicos dão perfil para as empresas e para os profissionais, de forma que as buscas por oportunidades são eficientes e focadas.

Se você está procurando talentos, o Balico é o melhor local para veicular o seu anúncio.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 7

5.8 switch-case90
5.9 arra ys90
5.10 Parâmetros da função main92
5.1 Compilação condicional93
5.12 Pré processador e tokens (símbolos) usados pelo pré-processador93
5.13 #define94
5.14 operador #94
5.15 operador ##94
5.16 Número variável de parâmetros95
Capítulo 6) Técnicas para melhoria de rendimento em programação96
6.1 Reutilização de código96

5.7.1 Laço tipo “do-while” 87 5.7.2 while 8 5.7.3 for 8 5.7.4 Alterando o controle dos laços com break e continue 89 5.7.5 Exercício 89 5.9.1 Arrays multidimensionais 92

Vogsys http://www.vogsys.com.br/

A Vogsys Consultoria e Desenvolvimento de Sistemas, é uma empresa especializada no fornecimento de soluções integradas para o segmento de mídia, possui uma expressiva participação no mercado de publicação impressa e on-line.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

6.2 Desenvolvimento e utilização de componentes97
6.3 Prog ramação estruturada98
Capítulo 7) Programação orientada a objeto9
7.1 I ntrodução9
7.2 Introdução a análise orientada a objetos100
7.3 Polimorfismo101
7.4 Uso de classes102
7.5 Heran ça103
7.6 Sobrecarga de operadores106
7.7 Construtor e destrutor de um objeto107

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 8 7.1.1 Abstração do software 9 7.1.2 Mudança de nomenclatura 100 7.1.3 Objetos 100 7.3.1 Argumento implícito (default argument) 102 7.7.1 Default constructor (construtor implícito) 108 7.7.2 Ordem de chamada de construtor e destrutor para classes derivadas 108 7.7.3 Inicialização de atributos com construtor não implícito 109

VBMcgi – programação para Internet (CGI) com C++ http://www.vbmcgi.org

Para quem sabe C++, ou quer saber, VBMcgi é a melhor opção para programação de sistemas de software para Internet. Trata-se de uma biblioteca gratuita, distribuída com código fonte original. A sua melhor característica é o fato de isolar o trabalho do webmaster do webdesigner. Isto é, o webdesigner pode usar programas de HTML comerciais, como Dream Weaver ou Front Page. Apenas o webmaster é programador C++ e lida com banco de dados. Além disso, VBMcgi é multiplataforma, testado em Windows e Unix.

Quem desenvolve usando ASP, PHP, JSP (java), Perl ou Cold Fusion, pode usar com C++ e VBMcgi. Não há problema em usar ao mesmo tempo C++/VBMcgi e outra tecnologia.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 9

7.8 lvalue1
7.9 Encapsulamento de atributos e métodos112
7.10 União adiantada × união atrasada (early bind × late bind)114
7.1 Classe base virtual17
7.12 Alocação de Memória119
Capítulo 8) Biblioteca padrão de C++125
8.1 I ntrodução125
8.2 Entrada e saída de dados pelo console125
8.3 Sobrecarga do operador insersor (<<) e extrator (>>)126
8.4 Formatando Entrada / Saida com streams127

7.7.4 Copy constructor (construtor de cópia) 110 7.10.1 Destrutores virtuais 116 7.12.1 Vazamento de memória 120 7.12.2 Objetos com memória alocada 121 7.12.3 Array de objetos com construtor não padrão 123 8.4.1 Usando flags de formatação 128 8.4.2 Examinando os flags de um objeto ios 129

VBLib – biblioteca gratuita multiplataforma para uso geral http://www.vbmcgi.org/vblib

Para quem usa C++, a VBLib oferece algumas classes bastante úteis. A VBMcgi usa VBLib. • Classe genérica (template) para lista encadeada (class VBList)

• Classe de string fácil e poderosa (class VBString)

• Classe para detectar vazamento de memória (VisualC++ only) VBMemCheck

• Classe para ajudar a medição de tempo (class VBClock)

• Classe para mostrar o conteúdo de um contenedor STL (class VBShowSTLContainer)

• Uma classe de calendário, que retorna o dia da semana para uma data dada (class VBCalendar)

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 10

8.5 Acesso a disco (Arquivos de texto para leitura/escrita)134
8.6 Acesso a disco (Arquivos binários para leitura/escrita)136
Capítulo 9) Programação genérica (template)140

8.4.3 Definindo o número de algarismos significativos 130 8.4.4 Preenchendo os espaços vazios com o método fill 131 8.4.5 Manipuladores padrão 131 8.4.6 Manipuladores do usuário 132 8.4.7 Saída com stream em buffer 133 8.5.1 Escrevendo um arquivo de texto usando a biblioteca padrão de C++ 134 8.5.2 Escrevendo um arquivo de texto usando a biblioteca padrão de C 134 8.5.3 Lendo um arquivo de texto usando a biblioteca padrão de C++ 135 8.5.4 Dica para leitura de arquivo de texto. 135 8.5.5 Lendo um arquivo de texto usando a biblioteca padrão de C 136 8.6.1 Escrevendo um arquivo binário usando a biblioteca padrão de C++ 136 8.6.2 Escrevendo um arquivo binário usando a biblioteca padrão de C. 137 8.6.3 Lendo um arquivo binário usando a biblioteca padrão de C++ 138 8.6.4 Lendo um arquivo binário usando a biblioteca padrão de C 138

VBMath – biblioteca gratuita multiplataforma para matemática http://www.vbmcgi.org/vbmath

Para quem usa C++, a VBMath oferece classes para matemática matricial. Desenvolvida em programação genérica (template), o usuário pode facilmente criar classes matriciais codificadas com float, double ou long double, por exemplo. As funções básicas de operação matemática matricial estão implementadas (+, -, *, /, inverse, etc).

Essa biblioteca é recomendada para implementação de contas matriciais de pequena dimensão, ou quando o requerimento de desempenho de execução não é severo. Nesse caso, aproveita-se a vantagem de fazer o programa de forma rápida e facilmente compreensível.

Também está implementada uma classe (genérica) VBParser para calcular em tempo de execução o resultado de uma fórmula matemática.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

9.1 Uma lista encadeada simples com template141
9.2 VBMath - uma biblioteca de matemática matricial usando classe template146
Capítulo 10) Tratamento de exceção (exception handling)152
Capítulo 1) RTTI – Identificação em tempo de execução154
1.1 I ntrodução154
1.2 t ypeid154
Capítulo 12) namespace156
12.1 I ntrodução156
12.2 Namespac e aberto157
12.3 Biblioteca padrão de C++ usando namespace158
12.4 Adaptando uma biblioteca existente para uso de namespace std159
Capítulo 13) STL - Standard Template Library161
13.1 I ntrodução161
13.2 Preâmbulo162

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 1 13.1.1 Classes contenedoras 161 13.1.2 Classes iteradoras 162 13.1.3 Algoritmos 162

Confraria de Mercado – restaurante & palestras: encontre-se aqui http://www.confrariademercado.com.br

A Confraria de Mercado é o seu ponto de encontro no Rio de Janeiro, no bairro de Botafogo (em frente a um estacionamento). É um restaurante que com comida muito boa, no estilo “simple chic”. Mas o grande diferencial é o fato de ter infra-estrutura para apresentação de palestras, com projetor (datashow) sofisticado, ligado a um computador moderno com Internet, a um vídeo cassete e ao sinal de TV a cabo.

A agenda de palestras e eventos (sempre gratuitos) pode ser conferida no site, assim como mapa para chegar lá, informações de contato, etc. Para quem se cadastrar, a confraria envia propaganda dos eventos por email.

Quem precisar de um local para almoço de negócios, pode reservar o local. Marque sua comemoração de formatura na Confraria de Mercado !

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 12

13.2.1.1 Par (pair)164
13.2.5.1 Alg umas regras168
13.3 I terador (iterator)168
13.4 Contenedor (container)170
13.4.6.1 Set176

13.2.1 Classes e funções auxiliares 164 13.2.2 Operadores de comparação 164 13.2.3 Classes de comparação 165 13.2.4 Classes aritméticas e lógicas 167 13.2.5 Complexidade de um algoritmo 167 13.3.1 Iteradores padrão para inserção em contenedores 169 13.4.1 Vector 170 13.4.2 List 171 13.4.3 Pilha (Stack) 172 13.4.4 Fila (Queue) 173 13.4.5 Fila com prioridade (priority queue) 174 13.4.6 Contenedores associativos ordenados 175

Kmail – email com inteligência. Venha para K você também. http://www.kmail.com.br

Kmail é a marca que representa tecnologia de email inteligente. Filtros de email, logs especializados de email e segurança de email são alguns dos serviços que se sabe prestar.

Na página da Internet, oferece-se serviço inteligente e gratuito de redirecionamento de email. O cadastro é feito imediatamente, e o redirecionamento é feito para até 5 locais, com filtros independentes.

“C / C++ e Orientação a Objetos em Ambiente Multiplataforma”, versão 5.1 Esse texto está disponível para download em w.del.ufrj.br/~villas/livro_c++.html

13.4.6.2 Multiset177
13.4.6.3 Map178
13.4.6.4 Multimap179
13.5 Alg oritmos179
Capítulo 14) Componentes de Programação181
14.1 Para Windows & DOS181
14.2 Componentes para unix (inclui Linux)183
14.3 Elementos de programação em tempo real184

Por Sergio Barbosa Villas-Boas (w.del.ufrj.br/~villas) pág. 13 13.5.1 remove_if 179 14.1.1 Programa para listar o diretório corrente (Visual C++) 181 14.1.2 Porta Serial 182 14.1.3 Porta Paralela 182 14.2.1 Entrada cega (útil para entrada de password) 183 14.3.1 Conceitos de programação em tempo real 184 14.3.2 Programa em tempo real com “status loop” 184 14.3.3 Programa em tempo real com interrupção 186 14.3.4 Programas tipo “watch dog” (cão de guarda) 188

DEL – Departamento de Engenharia Eletrônica e de Computação da UFRJ http://www.del.ufrj.br

Em 1934 a UFRJ abriu o Departamento de Engenharia Elétrica (juntamente com a inauguração de outros departamentos). Em 1962 o Departamento de Engenharia Elétrica passou para a sua atual localização física, no Centro de Tecnologia, na Cidade Universitária (Ilha do Fundão, RJ).

Em 1968, surge o DEL. O então Departamento de Engenharia Eletrônica da UFRJ passa a atuar de forma independente do Departamento de Engenharia Elétrica. Em 1994 o DEL implantou uma mudança de currículo e incorporou computação ao seu escopo. A sigla DEL foi mantida, mas o nome passou a ser Departamento de Engenharia Eletrônica e de Computação da UFRJ. O DEL atua em nível de graduação, mas tem forte integração com programas de pós graduação da COPPE.

(Parte 1 de 6)

Comentários