(Parte 1 de 5)

C++ Multiplataforma e Orientação a Objetos versão preliminar

Essa versão não foi 100% revista, mas está sendo liberada a pedido de muitos alunos.

Por Sergio Barbosa Villas-Boas (sbVB) Email: sbvb@sbvb.com.br URL: w.sbvb.com.br Versão 7.0, de 23 de Março de 2006

Consultor em tecnologia e estratégia para desenvolvimento de software multiplataforma, baseado em tecnologias gratuitas e padrões abertos.

Sobre o Autor

Sergio Barbosa Villas-Boas atua como Professor Adjunto no DEL (Departamento de Engenharia Eletrônica e Computação da UFRJ), desde 1987. Sua carreira sempre esteve ligada a desenvolvimento de software. Já trabalhou com instrumentação e controle, em sistemas em tempo real, em simulação numérica, sistemas cliente-servidor, sistemas GUI multiplataforma (com wxWidgets), segurança de informação, sistemas web, integração de sistemas e XML (principalmente com Xerces), sistemas corporativos, sistemas baseados em componentes, objetos distribuídos, uso de software gratuito, entre outros assuntos. Ultimamente tem havido ênfase no desenvolvimento de sistemas usando o paradigma orientado a objetos.

Desde a volta do doutorado no Japão, em 1998, tem se dedicado ao ensino na universidade, e ao continuado aprendizado por participar de diversos cursos e conferências. Além disso, dedica-se a projetos de extensão universitária, em geral com consultoria especializada em parcerias com diversas empresas.

Participou e participa diretamente de diversos projetos de desenvolvimento de software, especialmente para COTS (Commercial Off-The-Shelf, ou “produto de prateleira”), usando principalmente C++ multiplataforma e também java.

Desde 2000, mantém o site w.sbvb.com.br, onde divulga o material de diversos cursos que ministra.

Esse livro está sendo re-editado em função de vários pedidos, mas não é o material mais recente e revisado do autor a respeito de C++. Os slides do curso disponíveis no site estão mais atualizados que esse livro.

Sobre o Autor2
Índice3
1 Introdução14
1.1 Prefácio14
1.2 Histórico do livro19
1.3 Como usar o livro21
2 Tecnologia da informação e negócios24
2.1 Experiência de vida e visão de negócios24
2.2 Negócios forjam a tecnologia27
2.3 Classificação dos atores do ambiente para TI29
2.4 Ambiente econômico e modelo de negócio30
2.5 Web impacta ambiente econômico31
2.6 Analogia entre militarismo e negócios32
2.7 Conhecimento empacotado34
2.8 O produto “software”36
2.9 Analogia entre biologia e negócios38
2.10 Resultado da competição: resta um ou poucos40
2.1 Melhores práticas40
2.12 Incorporação de novidades41
2.13 Mercadoria e produto diferenciado4
2.14 O objetivo é atender ao cliente ?47
2.15 Vantagem competitiva49
2.16 Sociedade do conhecimento50
2.18 Livro no Século 2158
2.19 Tribos de tecnologia67
2.20 A escolha tecnológica é uma escolha estratégica68
2.21 Java × C++70
2.2 Estratégia para integradores de solução75
2.23 Resumo80
2.24 Estratégia e C++83
2.25 Humor84
2.26 Exercícios84
3 Conceitos introdutórios87
3.1 Breve história do C/C++87
3.2 Classificação de interfaces de programas89
3.3 Programando para console90
3.4 Linguagens de programação de computador90
4 Conheça o Seu Compilador92
4.1 Visual C++ 6.0 SP592
4.1.5.1 Fazer uma biblioteca104
4.1.5.2 Incluir uma biblioteca num projeto106
4.1.5.3 Examinar uma biblioteca106
4.1.7.1 Macro para formatação do texto fonte108
4.1.7.2 Acrescentando Lib no Project Settings125
4.1.7.3 Class View126
4.1.7.4 Usando bibliotecas de ligação dinâmica (DLL)127
4.1.7.5 DLL para Windows131
4.1.7.6 Otimização do linker para alinhamento de código131
4.2 Borland C++ builder 5.0133
4.2.2.1 Adicionando argumentos para a linha de comando136
4.3 C++ para win32 gratuito137
4.4 Dev-C++ 4.0138
4.4.2.1 Adicionando argumentos para a linha de comando140
4.5 g++ (do unix)142
4.5.1.1 Adicionando argumentos para a linha de comando143
4.5.4.2 Fazer uma biblioteca144
4.5.4.3 Examinar uma biblioteca145
4.5.5.1 Instalando uma biblioteca dinâmica146
4.5.8.1 rpm binário e rpm com fonte149
4.5.8.2 Alguns comandos do rpm149
4.5.8.3 Construindo um rpm150
4.5.8.3.1 Introdução150
4.5.8.3.2 O header151
4.5.8.3.3 Preparação (prep)152
5 Princípios de C/C++154
5.1 O primeiro programa154
5.2 Formato livre154
5.3 Chamada de função155
5.4 Declaração e definição de funções155
5.5 Comentários156
5.6 Identificador156
5.7 Constantes literais157
5.8 Escopo157
5.9 Tipos de dados padrão (Standard Data Types)158
5.10 Palavras reservadas do C++ (keywords)158
5.1 Letras usadas em pontuação159
5.12 Letras usadas em operadores159
5.13 Exercícios resolvidos159
6 Estrutura do Compilador161
6.1 Entendendo o Compilador161
6.2 Protótipos (prototypes)162
6.3 Projetos em C/C++164
6.4 Header Files (*.h)166
6.5 Biblioteca (library)167

6 / 441 4.5.5 Fazendo uma biblioteca usando libtool 145 4.5.6 Debug 148 4.5.7 Definindo um identificador para compilação condicional 148 4.5.8 O pacote RPM do linux 149 5.13.1 Resposta 160 6.5.1 Utilizando Bibliotecas prontas 167

6.6 Regras do compilador169
7 Linguagem C/C++171
7.1 Chamada de função por referência e por valor171
7.2 Tipos de dados definidos pelo programador172
7.3 Maquiagem de tipos (type casting)173
7.4 Operações matemáticas174
7.5 Controle de fluxo do programa174
7.6 Execução condicional175
7.7 Laços (loop) de programação175
7.8 switch-case178
7.9 arrays179
7.10 Ponteiros181
7.1 Arrays e ponteiros184
7.12 Arrays multidimensionais184
7.13 Parâmetros da função main184
7.14 Compilação condicional186
7.15 Pré processador e tokens (símbolos) usados pelo pré-processador186
7.16 #define186
7.17 operador #187
7.18 operador ##187
7.19 Número variável de parâmetros187
7.20 Exercícios188
8 Técnicas para melhoria de rendimento em programação190
8.1 Reutilização de código190
8.2 Desenvolvimento e utilização de componentes192
8.3 Programação estruturada193
9 Programação orientada a objeto195
9.2 Nomenclatura para paradigma procedural e para paradigma O195
9.3 Representação gráfica de classes196
9.4 Objetos197
9.5 Polimorfismo200
9.6 Análise, projeto e programação O201
9.7 Exemplo conceitual sobre herança201
9.8 Herança203
9.9 Herança múltipla e classe base virtual210
9.10 União adiantada × união tardia (early bind × late bind)213
9.1 Construtor e destrutor de um objeto220
9.12 Polimorfismo - sobrecarga de operadores233
9.13 this239
9.14 lvalue239
9.15 Encapsulamento de atributos e métodos240
9.16 Alocação de Memória246
9.17 Criando uma nova classe252
10 Biblioteca padrão de C++255
10.1 Introdução255
10.2 Entrada e saída de dados pelo console255
10.3 Sobrecarga do operador insersor (<<) e extrator (>>)256
10.4 Formatando Entrada / Saida com streams258
10.5 Acesso a disco (Arquivos de texto para leitura/escrita)265
10.6 Acesso a disco (Arquivos binários para leitura/escrita)269
1 Tratamento de exceção (exception handling)272
12 RTTI – Identificação em tempo de execução276
12.1 Introdução276
12.2 Configurando o compilador para RTTI276
12.3 Palavras reservadas para RTTI276
12.4 typeid276
12.5 typeid e late bind277
13 namespace278
13.1 Introdução278
13.2 Namespace aberto280
13.4 Adaptando uma biblioteca existente para uso de namespace std282
14 Programação para web com C++ e VBMcgi286
14.1 Introdução286
14.2 Navegando na teia288
14.3 Escolha de uma tecnologia para web/cgi291
14.4 História e futuro da VBMcgi293
14.5 Instalando VBMcgi294
14.6 Usando VBMcgi301
14.6.4.1 textbox (caixa de texto)310
14.6.4.2 textarea (área de texto)311
14.6.4.3 checkbox (caixa de checagem)312
14.6.4.4 radio button (botão radial)313
14.6.4.5 drop-down (deixar escapulir para baixo)315
14.6.4.6 Exemplo completo na web316
14.6.5.1 Adicionando implicitamente strings319
14.6.6.1 Passando parâmetros para a função da “call function”323
14.6.8.1 Configuração do navegador para ver os cookies328
14.6.8.2 Expiração328
14.6.8.3 Domínio de um cookie330
14.6.8.4 Sistema na web com login usando cookies330
14.7 Contador de página334
14.9 Menu em arquivo338
14.10 Programação em 3 camadas e sistemas na web com VBMcgi342
15 Programação genérica (template)344
15.1 Analogia entre template e fôrma de bolo344
15.2 Programação genérica por exemplos345
15.3 Classes genéricas contenedoras352
15.4 VBMath - uma biblioteca de matemática matricial em genérico358
16 STL - Standard Template Library364
16.1 Introdução364
16.2 Preâmbulo365
16.2.1.1 Par (pair)367
16.2.5.1 Algumas regras372
16.3 Iterador (iterator)373
16.4 Contenedor (container)375
16.4.6.1 Set381
16.4.6.3 Map383
16.4.6.4 Multimap385
16.5 Algoritmos385
17 Componentes de Programação388
17.1 Para Windows & DOS388
17.2 Componentes para unix (inclui Linux)394
17.3 Elementos de programação em tempo real399
18 Boa programação × má programação406
18.1 Introdução406
18.2 Itens de boa programação407
diretamente408

18.2.2.1 Motivos pelos quais é má programação tratar strings

18.2.2.2 Solução recomendada para tratamento de strings: uso de classe de string 409

19 Erros de programação, dicas e truques416
19.1 Cuidado com o operador , (vírgula)416
19.2 Acessando atributos privados de outro objeto416
19.3 Entendendo o NaN417
19.5 Passagem por valor de objetos com alocação de memória419
19.6 Sobrecarga de insersor e extrator quando se usa namespace420
19.7 Inicializando membro estático de uma classe421
19.8 Alocação de array de objetos não permite parâmetro no construtor422
para método)422
19.10 SingleTon423
19.1 Slicing em C++424
19.12 Uso desnecessário de construtores e destrutores426
19.13 Dicas de uso de parâmetro implícito427
20 Incompatibilidades entre compiladores C++429
20.1 Visual C++ 6.0 SP5429

19.9 Ponteiro para função global e ponteiro para função membro (ponteiro 20.1.1 for não isola escopo 429 20.1.2 Comportamento do ifstream quando o arquivo não existe 429 20.1.3 ios::nocreate não existe quando fstream é usado com namespace std 430

20.1.4 Compilador proíbe inicialização de variáveis membro estáticas diretamente 430

20.2 Borland C++ Builder (versão 5.0, build 12.34)431

20.1.5 “Namespace lookup” não funciona em funções com argumento 430 20.1.6 Encadeamento de “using” não funciona 431 20.1.7 Erro em instanciamento explícito de funções com template 431 20.2.1 Inabilidade de distinguir namespace global de local 431

20.2.2 Erro na dedução de funções com template a partir de argumentos const 431

20.3 Gnu C++ (versão 2.91.6)432
21 Bibliografia433
21.1 Livros433

A linguagem de programação C/C++ é um assunto já relativamente tradicional no dinâmico mercado de tecnologia de informação, sempre cheio de novidades. Existe um acervo bibliográfico substancial sobre esse assunto. Portanto surge a pergunta: ainda há espaço ou necessidade para um novo livro sobre C/C++ ? Acredito que sim, pelos motivos abaixo.

1. Deve-se discutir a opção de uso de C/C++ como uma escolha estratégica.

Mesmo que não seja gestor de uma empresa, o indivíduo precisa gerenciar a própria carreira. Mesmo que não se trabalhe com vendas, é preciso ser capaz de vender a própria força de trabalho no mercado. É muito conveniente para o profissional de tecnologia de informação desenvolver minimamente o conhecimento sobre estratégia (empresarial e pessoal). Para desenvolver esse tipo de pensamento e atitude, deve-se discutir elementos que auxiliem a interpretação o mundo a partir de uma visão de negócios, particularmente negócios relacionados a tecnologia de informação. Inúmeros negócios e inovações na área de tecnologia envolvem o uso de C/C++, mas curiosamente nunca vi um livro tutorial sobre C/C++ que discutisse minimamente sobre o ambiente de negócios, e o relacionando da escolha de tecnologia e de estratégia pessoal e empresarial. A escolha da linguagem C/C++ deve (ou não) ser feita, com conhecimento das vantagens e desvantagens dessa escolha.

Na primeira parte deste livro, a partir da página 23, discute-se o relacionamento entre tecnologia e negócios, escolha tecnológica, estratégia de indivíduos empresas, e assuntos relacionados. Como conseqüência dessa reflexão, analisa-se a escolha da linguagem C/C++ ou alternativas, verificando vantagens e desvantagens.

2. Deve-se mostrar que C/C++ é opção concreta para programação para web/cgi. Ainda há MUITO o que fazer no mundo a partir do desenvolvimento de sistemas com tecnologia de web/cgi. Quando a web conquistou para o mundo, a partir de cerca de 1995, eu já trabalhava há muito tempo com C/C++. Tive a expectativa que a web seria mais uma novidade no setor de tecnologia de informação, para a qual se poderia desenvolver software com a linguagem C/C++. No início, fiquei incomodado pela dificuldade de se encontrar referências boas sobre como programar para web/cgi com C/C++.

A expectativa de ser possível usar C/C++ para web/cgi é correta, apenas o material tutorial e as bibliotecas de apoio ainda não eram boas o suficiente. Resolvi então estudar e pesquisar sobre assunto, fazendo o trabalho convergir para uma biblioteca e um material tutorial para desenvolvimento de sistemas web/cgi baseado em C++. O resultado é a biblioteca gratuita VBMcgi [45], que permite desenvolvimento de software para web/cgi usando C++ multiplataforma. Esse desenvolvimento é feito com uma arquitetura de software elegande, em que se garante isolamento entre a camada de apresentação (onde o webdesigner usar html) e a camada de implementação das regras de negócio (onde o webmaster usa C++ e VBMcgi).

Quem usa ou quer usar C++ não precisa aprender outra linguagem para desenvolver software para web/cgi. O uso da biblioteca VBMcgi permite o desenvolvimento de software para web em C++ com arquitetura em 3 camadas. Isso leva o que leva ao desenvolvimento de sistemas com boa manutebilidade (isto é, pode-se fazer manutenção facilmente).

3. C/C++ deve ser ensinado como multiplataforma. Ainda há relativamente poucos livros que enfatizam o aspecto multiplataforma dessa linguagem. Muitos livros se propõe a ensinar C/C++ a partir de um compilador específico. Considero isso em geral um erro. A ênfase no ensino de C/C++ deve ser em cima dos conceitos, e não no compilador ou no sistema operacional. No capítulo “Conheça o Seu Compilador” (página 23), há um conjunto de explicações sobre operacionalidade dos principais compiladores para Windows e unix. Além disso, há um capítulo sobre “Diferenças entre compiladores” (pagina 426), onde são listadas pequenas (porém importantes) diferenças de comportamento entre os compiladores.

4. C/C++ deve ser ensinado com ênfase em Orientação a Objetos. Os conceitos de desenvolvimento de sistemas orientados a objetos não estão maduros ainda. Apesar de todas as publicações sobre desenvolvimento de sistemas usando paradigma orientado a objetos, nem todas as questões foram resolvidas ainda. Por exemplo: banco de dados orientados a objetos é algo ainda precisa provar que tem vantagens em relação a banco de dados relacionais (desses que usam SQL). Mas mesmo assim, é basicamente claro que a linguagem C++ e o paradigma O são em muitos casos método superior de desenvolvimento se comparado à linguagem C e paradigma procedural. Embora C++ tenha surgido depois de C, não é em geral uma boa abordagem didática ensinar a um jovem profissional C “puro” antes de C++. Isso porque seria uma grande perda de tempo (para dizer o mínimo). A melhor abordagem didática é ensinar C++ diretamente, com ênfase em orientação a objetos, e apenas mencionar C quando for preciso.

O fato de haver um legado extenso sobre C (literatura, exemplos, etc.), e de que C++ tem compatibilidade reversa com C (isso é, em geral um programa C é também um programa C++), faz com que muita literatura tradicional seja na prática algo contra-indicado para um profissional jovem. A ênfase em C++ e O, em detrimento de C, deve ser a ênfase de um livro didático moderno. Ainda há relativamente poucos livros com essa ênfase.

5. Deve-se pensar em produzir um livro num modelo inovador, compatível com o século 21. Apesar de toda a modernidade, e de toda a impressionante produção de obras de literatura técnica, o modelo de negócios na produção de livros curiosamente pouco evoluiu em relação ao modelo tradicional. Esse livro está sendo produzido e distribuído num modelo inovador, compatível com o ambiente do século 21. Leia mais sobre assunto na seção 2.18.

6. Deve-se ensinar regras práticas para boa programação. Ainda há relativamente poucos livros de C/C++, principalmente em Português, que enfatizam a boa programação, reutilização de código e o trabalho em equipe. Uma abordagem simplória da atividade do profissional de TI é acreditar que “programa de boa qualidade é aquele que funciona”. Essa abordagem está superada hoje. Há valorização do processo de desenvolvimento, na arquitetura e na manutebilidade do software. Há interesse no ciclo de vida do produto que se está desenvolvendo. De uma forma geral, entende-se que quando o processo de desenvolvimento é feito dentro de certas características, a qualidade do produto final é melhor. Isso se reflete na programação, onde se espera que o profissional siga “regras de boa programação”, e que tenha atitude de usar (e eventual mente desenvolver) componentes de software.

No capítulo “Boa programação × má programação” (página 406), enfatizase os aspectos que um programa deve ter para atingir as necessidades práticas de empresas e organizações. Nesse capítulo, o objetivo de se obter reutilização de código, trabalho em equipe, bem como métodos práticos para minimizar a possibilidade de bugs é traduzido em regras escritas.

Além disso, o conhecimento consolidado de como se desenvolvem e se usam bibliotecas e componentes, discutido na parte 2 do livro, permite ao programador usar com destreza bibliotecas e componentes feitas por outras pessoas, e com isso melhorar muito seu desempenho de programação. Eventualmente pode-se também trabalhar no sentido inverso, isto é, desenvolvendo bibliotecas para que outros usem, e considerar a biblioteca como o produto da empresa.

7. Deve-se produzir obras originais em Português. É amplamente aceito o fato de que atualmente o centro do desenvolvimento de tecnologia de informação produz obras originais no idioma Inglês. Muitos livros são produzidos originalmente em Inglês, e posteriormente são traduzidos para Português e outros idiomas. Qualquer indivíduo ou empresa que pretenda ter seu trabalho de computação reconhecido no atual momento do mundo, com pensamento global, deve ter conteúdo produzido em Inglês. Portanto, produzir uma obra original em Português seria investir num idioma fora do centro de progresso, e portanto um “desperdício de energia” (pois se poderia estar investindo para produzi-lo em Inglês, com visibilidade para todo o mundo). Enquanto me dedico a esse livro, observo alguns colegas professores de universidade que se empenham por produzir livros em Inglês, o que merece muito respeito.

O fato de produzir uma obra original como essa em Português é portanto, antes de tudo, um ato de amor ao nosso país e a nossa cultura. É também um ato de fé nas chances do Brasil (e nos países que falam Português) de assumir um papel mais sólido no mercado mundial de software e assuntos relacionados. Nosso povo tem reconhecidas características de criatividade e flexibilidade – muito valorizadas na atividade de desenvolvimento de software.

Na seção 2.18.7, na página 6, fala-se mais sobre a situação do idioma Português no mundo. Na seção 18.2.7, na página 413, discute-se sobre a escolha do idioma para a programação em si. Apesar de esse livro ser produzido originalmente em Português, quase sempre se escreve código fonte no idioma Inglês. Isso não é uma contradição, mas uma forma de ação recomendada a partir de uma análise ponderada do ambiente, e de formulação de estratégia.

a. Idioma inglês nos códigos fonte. Considerando-se combinadamente alguns fatores já abordados, conclui-se que o melhor idioma para os programas fonte de exemplo é inglês. O desenvolvedor deve trabalhar com atenção ao mesmo tempo em tecnologia e em negócios. No mundo globalizado, empresas são compradas por outras empresas a todo momento. Seja uma empresa A, cujo produto é um software. Seja uma empresa maior B, que se interessa em comprar a empresa A (menor que B, mas apresentando bom crescimento). O processo de a empresa compradora B avaliar no valor da empresa A inclui a observação do código fonte. Se o código fonte é em Inglês, a empresa A passa a ser vendável mundialmente. Se o desenvolvedor e o empreendedor entendem que escrever o código fonte de seus programas em inglês é o que deve ser feito, então o material tutorial deve ensinar e induzir o profissional a trabalhar dessa forma. Mas como se deseja produzir um material em Português, então o livro deve ter explicações em texto corrido em Português, mas ter os códigos fonte de exemplo em Inglês.

Convém comentar que como autor, sou também consumidor de livros sobre desenvolvimento de software. Qualquer livro sobre tecnologia atualmente é produzido em relativamente pouco tempo, e isso faz aumentar a probabilidade de erro. Um livro sobre software traduzido de Inglês para Português, cheio de códigos fonte, em que o tradutor opte por traduzir esse código fonte, faz aumentar muito a probabilidade de haver erro no livro. Isso porque é quase certo que o tradutor jamas compilou o texto que apresenta no livro (mas o autor original em geral faz isso). Em outras palavras: além de poder ser considerado conceitualmente inadequado desenvolver software escrevendo em Português, o leitor de livro traduzido ainda tem que enfrentar os prováveis erros na tradução do código fonte.

Por tudo isso, e também pelo fato de o leitor desse livro certamente complementará seus conhecimentos lendo diretamente em Inglês, creio que o melhor que se deve fazer pelo profissional em fase de formação é ensina-lo com códigos de exemplo basicamente em Inglês, como é feito nesse livro.

8. Mais lenha na famosa “briga” entre C++ e java. A linguagem C++ implementa os conceitos de orientação a objetos, que são de grande valor em projetos de tecnologia de informação. Outras linguagens também o fazem. A linguagem java também implementa muito bem os conceitos de orientação a objetos, e claramente concorre com C++ como alternativa tecnológica para implementação de sistemas. Há um debate quente sobre C++ versus java. Várias universidades acreditam que não é mais necessário ensinar C/C++, porque supostamente java a substituiria com vantagem de ser mais segura, elegante, robusta, portável, etc. Eu sustento que embora a linguagem java tenha várias qualidades, é um erro parar de ensinar C/C++. Na seção “Java × C++”, na página 70, discute-se a comparação entre C++ e Java, do ponto de vista estrutural e estratégico.

Em pleno século 21, C++ é uma linguagem viva, vibrante e com muito, muito, futuro. Pensando assim, o mercado precisa seguir melhorando sempre o material tutorial para C/C++, inclusive porque há novidades acrescentadas a linguagem há relativamente pouco tempo, (e.g. namespace, RTTI, programação genérica com template, STL), e que precisam ser ensinadas com material didático sempre melhorado.

Enfim, a partir das justificativas acima, creio que ainda há trabalho a ser feito no campo de autoria de livros para C++. Trabalho diretamente lecionando C++, programação e desenvolvimento de sistemas usando o paradigma orientado a objetos. Percebo que há constante escassez de gente qualificada, seja para os diversos projetos que faço na universidade, seja para ofertas de emprego em empresas boas (isto é, onde se desenvolve software de “alta densidade”). Há inúmeras ofertas profissionais para quem realmente conhece esse assunto, com remuneração em geral bem acima da média nacional.

Espero que a disponibilização desse livro sobre C++ incentive a formação de profissionais de software. Como efeito imediato, espero perceber um aumento na quantidade e qualidade de profissionais de software nessa linguagem. Assim, haverá gente para compor quadros especializados para tocar projetos interessantes que vão surgir. Como efeito indireto, e muito desejável, espero ajudar o Brasil, bem como todos os povos que falam Português, a melhorar sua qualificação técnica, e com isso obter melhoria no nível de emprego humano em atividade econômica. Em última análise, espero colaborar com o desenvolvimento econômico e bem estar social.

Esse é um livro que vem sendo escrito aos poucos. A seção abaixo mostra a evolução das diversas versões do texto.

1. Em 1992 foi feita uma versão chamada “Conceitos Básicos de C / C++”, para um curso oferecido à Rede Ferroviária Federal. Nessa época, estava na moda usar o compilador Borland C++ 3.1. (No período de 1993 a 1998, o autor esteve no Japão, Universidade de Chiba, fazendo curso de Doutorado).

2. Em 1999, foi feita uma versão profundamente modificada, chamada

“Conceitos de software para sistemas de armas”, para um curso oferecido à Marinha do Brasil. Esse curso foi efetivamente “C++ e orientação a objetos, em console”. Para esse curso, usou-se o compilador Borland C++ 5.0.

3. Em 31 de agosto de 1999 foi feita a uma versão “esqueleto” desse livro, com o projeto de escreve-lo aos poucos e disponibilizar as versões correntes em página web. Definiu-se o nome do livro como “C/C++ Multiplataforma”. Chamou-se essa versão de 1.0, ainda com inconsistências. Mesmo assim foi tornada pública na Internet a pedido de alunos.

4. Em 15 de Fevereiro de 2000, a pedido de um amigo, eu publiquei a versão 1.1 do livro. Há inúmeras melhorias em relação à versão 1.0, mas essa versão ainda continha inconsistências.

5. Em 15 de Março de 2000, após várias modificações e acréscimos em relação a versão anterior, foi disponibilizada a versão 2.0. Essa versão ainda possuía diversas seções incompletas (marcadas com //todo), e algumas seções inconsistentes. Essa versão trouxe uma mudança de título, que passou a se chamar “C/C++ e Orientação a Objetos em Ambiente Multiplataforma”.

6. Em Julho de 2000, fiz diversas melhorias baseado na experiência de um curso oferecido com esse livro. Essa foi a versão 3.0.

a. Refeito e melhorado o capítulo “Conheça Seu Compilador”.

(Parte 1 de 5)

Comentários