Você está na página 1de 27

a

C++ Para Leigos Folh la


o
de C
Entender e executar programao em C++, que o padro para linguagens
orientadas a objetos, mais fcil quando voc conhece as expresses, as
declaraes e os operadores para efetuar clculos.

Expresses e Declaraes em Programao C++


Para efetuar um clculo no programa C++, voc precisa de uma expresso. Uma expresso uma
instruo que possui um valor e um tipo. No programa C++, uma declarao uma instruo que define
uma varivel ou o tanque de segurana para algum tipo de valor, como um nmero ou caractere.

Expresses
As expresses tomam uma das seguintes formas:
objName // para um objeto simples
operator expression // para operadores unrios
expr1 operator expr2 // para operadores binrios
expr1 ? expr2 : expr3 // para o operador ternrio
funcName([argument list]); // para chamadas de funo

Expresses Literais
Uma literal uma forma de expresso constante. Os vrios tipos de literais so definidos na
seguinte tabela literal.
Exemplo Tipo
1 int
1L long int
1LL long long int
1.0 double
1.0F float
1 char
a string char* (automaticamente terminado por
um caractere nulo)
L a string wchar_t*
u8 this is a UTF-8 string with a UTF-8 char8_t*
character: \u2018
u this is a UTF-16 string with a UTF-16 char16_t*
character: \u2018
U this is a UTF-32 string with a UTF-32 char32_t*
character: \U00002018
true, false bool
0b101 binary (padro C++ 2014)

Para Leigos: A srie de livros para iniciantes que mais vende no mundo.

PF_CG_C++FD_Book.indb 1 05/05/2016 13:51:35


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
a
C++ Para Leigos Folh la
o
de C

Declaraes
Declaraes so tipos intrnsecos e definidos pelo usurio. Os tipos intrnsecos so:
[<signed | unsigned >]char
[<signed | unsigned >]wchar_t
[<signed | unsigned>] [<short | long | long long>] int
float
[long] double
bool

As declaraes tm um destes formatos:


[<extern|static>][const] type var[=expression]; // varivel
[<extern|static>][const] type array[size][={list}]; // array
[const] type object[(argument list)]; // objeto
[const] type object [= {argument list}]; // alternativo
[const] type * [const] ptr[=pointer expression]; // ponteiro
type& refName = object; // referncia
type fnName([argument list]); // funo

A palavra-chave auto pode ser usada se C++ determinar o tipo de varivel sozinho.
auto var = 1L; // o tipo de var long int

A palavra-chave decltype extrai o tipo de uma expresso. Esse tipo pode ser usado quando
um nome de tipo for usado. Por exemplo, o seguinte exemplo usa decltype para declarar a
segunda varivel com o mesmo tipo de uma varivel existente.
decltype(var1) var2; // o tipo de var2 o mesmo de var1

Uma definio de funo tem o seguinte formato:


// funo simples
[<inline|constexpr>] type fnName(argument list) {...}
// funo de membro definida fora da classe
[inline] type Class::func(argument list) [const] {...}
// construtores/destrutores tambm podem ser definidos fora da
classe
Class::Class([argument list]) {...}
Class::~Class() {...}
//construtores/destrutores podem ser excludos ou padronizados
// no lugar de definio
Class::Class([argument list]) = <delete|default>;
Class::~Class() = <delete|default>;

Para Leigos: A srie de livros para iniciantes que mais vende no mundo.

PF_CG_C++FD_Book.indb 2 05/05/2016 13:51:35


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
C++
Traduo da 7 Edio

por Stephen R. Davis

Rio de Janeiro, 2016

PF_CG_C++FD_Book.indb 3 05/05/2016 13:51:35


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sobre o autor
Stephen R. Davis, CISSP (tambm conhecido como Randy) vive
com sua esposa e dois cachorros em Corpus Christi, Texas. Randy tem
trs filhos e dois netos, com mais um a caminho (netos, no filhos).
Randy desenvolve aplicaes baseadas em navegadores para a Agency
Consulting Group.

Dedicatria
Para Janet, o amor da minha vida.

Reconhecimentos do Autor
Eu acho muito estranho que apenas um nome aparea na capa do
livro, especialmente um livro como este. Na verdade, muitas pessoas
contribuem para a criao de um livro Para Leigos. Desde o incio, o
editor de aquisies Constance Santisteban, o editor de projeto Pat O
Brien e minha agente, Claudette More, estiveram envolvidos em guiar e
modelar o contedo do livro. Durante o desenvolvimento das sete edies
deste livro, eu me vi envolvido em edies, correes e sugestes de um
grupo de editores, revisores e revisores tcnicos este livro teria sido
um trabalho pobre se no fosse pelo envolvimento deles. E nada teria
feito ele ser impresso sem a ajuda de Suzanne Thomas, que coordenou a
primeira e a segunda edio do livro, Susan Pink, que trabalhou na terceira
e na sexta edio, Katie Feltman que trabalhou na sexta edio e Danny
Kalev, que fez a reviso tcnica da sexta e da stima edio. Contudo, um
nome aparece na capa e aquele nome deve assumir responsabilidade por
imprecises no texto.

Finalmente, um resumo da atividade animal na minha casa. Para aqueles


que no leram meus outros livros, eu deveria avis-los que isso se tornou
uma caracterstica frequente em meus livros Para Leigos.

Eu me mudei para a cidade grande em 2005, o que significou ter que


dar meus cachorros Chester e Sadie. Eu tentei manter nossos dois grandes
Dogues, Monty e Bonnie, mas eles eram demais para o quintal. Ns fomos
obrigados a d-los tambm. Eu me casei com minha namorada da escola
em 2011 e me mudei de Dallas para minha cidade natal, Corpus Christi,
o que me levou a adotar um novo par de cachorros (ou melhor, eles me
adotaram). Jack um cachorro preto e teimoso de raa indefinida. Dizem
que Scruffy era um dachshund muito peludo mas voc no consegue notar
pela sua aparncia j que ele fica tosado a maior parte do tempo.

PF_CG_C++FD_Book.indb 5 05/05/2016 13:51:35


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sumrio Resumido
Introduo 1
Parte I: Comeando com Programao em C++ 7
Captulo 1: Escrevendo Seu Primeiro Programa em C++ 9
Captulo 2: Declarando Variveis Constantemente 33
Captulo 3: Efetuando Operaes Matemticas 49
Captulo 4: Efetuando Operaes Lgicas 57
Captulo 5: Controlando o Fluxo do Programa 71

Parte II: Como se Tornar um Programador Funcional 89


Captulo 6: Criando Funes 91
Captulo 7: Armazenando Sequncias em Arrays 109
Captulo 8: Uma Primeira Olhada nos Ponteiros em C++ 127
Captulo 9: Uma Segunda Olhada nos Ponteiros em C++ 143
Captulo 10: O Pr-processador C++  161

Parte III: Introduo s Classes 175


Captulo 11: Examinando a Programao Orientada a Objeto 177
Captulo 12: Adicionando Classes em C++ 183
Captulo 13: Aponte e Encare os Objetos 199
Captulo 14: Protegendo Membros: No Perturbe 217
Captulo 15: Amor, Por Que Voc me Constri, Apenas Para me Destruir? 225
Captulo 16: Fazendo Argumentos Construtivos 237
Captulo 17: Os Construtores de Cpia e de Movimento 259
Captulo 18: Membros Estticos: Ser que Amaciante de Roupa Pode Ajudar? 273

Parte IV: Herana 283


Captulo 19: Herdando uma Classe 285
Captulo 20: Examinando Funes de Membro Virtuais: Elas So Reais? 295
Captulo 21: Fatorando Classes 305

Parte V: Segurana 315


Captulo 22: Um Novo Operador de Atribuio, Caso
Voc Decida Aceit-lo 317

PF_CG_C++FD_Book.indb 7 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Captulo 23: Usando o Fluxo de I/O  329
Captulo 24: Tratamento de Erros Excees 351
Captulo 25: Herdando Heranas Mltiplas 361
Captulo 26: Templates Tentadores em C++ 373
Captulo 27: Padronizando na Biblioteca Padro de Gabaritos (STL) 383
Captulo 28: Escrevendo Cdigo a Prova de Hackers 395

Parte VI: A Parte dos Dez 421


Captulo 29: 10 Maneiras de Evitar Adicionar Bugs ao Seu Programa 423
Captulo 30: 10 Maneiras de Proteger Seus Programas dos Hackers 431

ndice 447

PF_CG_C++FD_Book.indb 8 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sumrio
Introduo 1
Sobre Este Livro 1
cones Usados Neste Livro 4
Alm do Livro 4
De L Para C, Daqui Para L 5

Parte I: Comeando com Programao em C++ 7


Captulo 1: Escrevendo Seu Primeiro Programa em C++9
Dominando Conceitos de C++ 10
Instalando o Code::Blocks 11
Windows 12
Linux Ubuntu 14
Macintosh 16
Criando Seu Primeiro Programa em C++ 20
Criando um projeto 20
Inserindo cdigo em C++ 22
Trapaceando 23
Construindo seu programa 25
Executando Seu Programa 26
Analisando o Programa Escrito 27
Examinando a estrutura de todos os programas C++ 27
Explicando o cdigo-fonte com comentrios 28
Baseando os programas em instrues C++  29
Escrevendo declaraes 29
Produzindo uma sada  30
Calculando Expresses 30
Armazenando os resultados de uma expresso 31
Examinando o restante do programa Conversion 31

Captulo 2: Declarando Variveis Constantemente33


Declarando Variveis 34
Declarando Tipos Diferentes de Variveis 34
Analisando as limitaes dos inteiros em C++ 35
Resolvendo o problema do arredondamento 36
Olhando para os limites dos nmeros de ponto flutuante 37
Declarando Tipos de Variveis  39
Tipos de constantes 40
A Variao dos Tipos Numricos 41
Caracteres especiais 42
Grandes Carregamentos na Estrada do Char 43
Estes Clculos So Lgicos Mesmo? 44

PF_CG_C++FD_Book.indb 9 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
x C++ Para Leigos

Expresses em Modo Misto 45


Declaraes Automticas 46

Captulo 3: Efetuando Operaes Matemticas49


Efetuando Aritmtica Binria Simples 50
Decompondo as Expresses 51
Determinando a Ordem das Operaes 51
Efetuando Operaes Unrias 52
Utilizando os Operadores de Atribuio 54

Captulo 4: Efetuando Operaes Lgicas57


Por Que Mexer com Operaes Lgicas? 58
Usando os Operadores Lgicos Simples 58
Armazenando valores lgicos 59
Usando variveis lgicas int 61
Tome cuidado ao efetuar operaes lgicas em
variveis de ponto flutuante 61
Expressando Nmeros Binrios  63
O sistema numrico decimal 63
Outros sistemas numricos 64
O sistema numrico binrio 64
Efetuando Operaes Lgicas Bitwise 66
Os operadores bit a bit 67
Usando os operadores bitwise 68
Um teste simples 69

Captulo 5: Controlando o Fluxo do Programa71


Controlando o Fluxo de Programa com os Comandos
de Seleo (Branch) 72
Executando Loops em um Programa 74
Fazendo o loop enquanto a condio for verdadeira 74
Usando o recurso autoincremento/autodecremento 76
Usando o loop for 77
Evitando o temido loop infinito 80
Cada um com seu for 81
Aplicando controles de loop especiais 82
Comandos de Controle Aninhados 85
Mudando para um Assunto Diferente? 86

Parte II: Como se Tornar um Programador Funcional 89


Captulo 6: Criando Funes91
Escrevendo e Usando uma Funo 92
Definindo nossa primeira funo 94
Definindo a funo sumSequence() 94
Chamando a funo sumSequence() 95
Dividir e conquistar 95
Entendendo os Detalhes das Funes 95
Entendendo funes simples 96

PF_CG_C++FD_Book.indb 10 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sumrio xi
Entendendo funes com argumentos 97
Sobrecarregando Nomes de Funes 100
Definindo Prottipos de Funo 102
Estabelecendo Argumentos 103
Passagem por Valor e Passagem por Referncia 105
Tipos de Armazenamento da Varivel 106

Captulo 7: Armazenando Sequncias em Arrays109


Formando os Argumentos para os Arrays 109
Usando um array 111
Inicializando um array 114
Indo longe demais no array  115
Formando loops for baseados em intervalo 116
Definindo e usando arrays de arrays 116
Usando Arrays de Caracteres 117
Criando um array de caracteres 117
Criando uma string de caracteres 118
Manipulando Strings com Caractere 120
Adicionando Funes de Biblioteca 122
Abrindo Espao para Strings Grandes 124

Captulo 8: Uma Primeira Olhada nos Ponteiros em C++127


Tamanho da Varivel 127
O Que um Endereo? 129
Operadores de Endereo 129
Usando Variveis Ponteiro 131
Usando tipos diferentes de ponteiros 132
Passando Ponteiros para as Funes 133
Passagem por valor 133
Passagem por ponteiro 134
Passagem por referncia 134
A Constante Irritao de const 135
Utilizando o bloco de memria chamado Heap 137
Escopo limitado 137
Examinando o problema de escopo 139
Gerando uma soluo usando o heap 139

Captulo 9: Uma Segunda Olhada nos Ponteiros em C++143


Definindo Operaes em
Variveis Ponteiro 143
Reexaminando arrays do ponto de vista das variveis ponteiro144
Aplicando operadores ao endereo de um array 146
Expandindo operaes de ponteiro para uma string 147
Justificando a manipulao de string baseada em ponteiro 149
Aplicando operadores aos tipos de ponteiro alm de char 150
E Quando No um Ponteiro? 152
Declarando e Usando Arrays de Ponteiros 153
Utilizando arrays de strings de caractere 154
Acessando os argumentos para main() 156

PF_CG_C++FD_Book.indb 11 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
xii C++ Para Leigos

Captulo 10: O Pr-processador C++ 161


O Que um Pr-processador?  161
Incluindo Arquivos 162
#Definindo Coisas 165
Ok, que tal no #definir coisas? 168
Enumerando outras opes 169
Incluindo Itens #Se Eu Disser Sim 171
Objetos Definidos Intrinsecamente 172
Typedef 174

Parte III: Introduo s Classes 175


Captulo 11: Examinando a Programao Orientada a Objeto 177
Abstraindo o Forno de Micro-ondas 177
Preparando nachos funcionais 178
Preparando nachos orientados a objeto 179
Classificando os Fornos de Micro-ondas 179
Por Que Classificar? 180

Captulo 12: Adicionando Classes em C++183


Apresentando a Classe 183
O Formato de uma Classe 184
Acessando os Membros de uma Classe 185
Ativando Nossos Objetos 185
Simulando objetos do mundo real 186
Por que se preocupar com
funes membro? 186
Adicionando uma Funo membro 187
Chamando uma Funo Membro 188
Acessando outros membros a partir de uma funo membro 190
Resoluo do Escopo (E Eu No Quero Saber se Seu
Telescpio Funciona Bem) 191
Definindo uma Funo
Membro na Classe 193
Mantendo uma Funo Membro depois da Classe 195
Sobrecarregando Funes Membro 196

Captulo 13: Aponte e Encare os Objetos199


Declarando Arrays de Objetos 199
Declarando Ponteiros para Objetos 200
Derreferenciando um ponteiro objeto 201
Apontando com o operador seta 202
Passando Objetos para as Funes 202
Chamando uma funo com um valor objeto 203
Chamando uma funo com um ponteiro para objeto 204
Chamando uma funo com o uso do operador de referncia 206
Por Que se Incomodar com Ponteiros ou Referncias? 207
Voltando para o Heap 207
Alocando Arrays de Objetos no heap 208

PF_CG_C++FD_Book.indb 12 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sumrio xiii
Quando a memria est alocada para voc 209
Conexo com Listas Ligadas 209
Efetuando outras operaes em umalista ligada 211
Conectando com um programa LinkedListData 211
Um Fio de Esperana: Uma Lista de Contineres
Ligados Biblioteca C++ 215

Captulo 14: Protegendo Membros: No Perturbe217


Protegendo Membros 217
Por que voc precisa de membros protegidos 218
Descobrindo como os membros protegidos funcionam 218
Criando um Argumento para Uso com Membros Protegidos 220
Protegendo o estado interno da classe 220
Usando uma classe com uma interface limitada 221
Dando a Funes No-Membros Acesso aos Membros Protegidos 221

Captulo 15: Amor, Por Que Voc me Constri,


Apenas Para me Destruir?225
Criando Objetos 225
Usando Construtores 226
Construindo um objeto nico 227
Construindo objetos mltiplos 228
Construindo um duplex 229
Dissecando um Destrutor 231
Por que voc precisa do destrutor 231
Trabalhando com destrutores 232

Captulo 16: Fazendo Argumentos Construtivos237


Equipando os Construtores com Argumentos 238
Usando um construtor 238
Exigindo Muito do Ajudante: Sobrecarregando o Construtor 240
Estabelecendo Construtores Padres 243
Construindo Membros de Classe 245
Construindo um membro de dados complexo 245
Construindo um membro de dados constante 251
Reconstruindo a Ordem de Construo 251
Objetos locais construdos em ordem 252
Objetos estticos construdos apenas uma vez 252
Todos os objetos globais construdos antes de main() 253
Os objetos globais no so construdos em uma ordem fixa 254
Membros construdos na ordem em que so declarados 255
Destrutores destroem na ordem inversa dos construtores 256
Construindo Arrays 256
Construtores como uma Forma de Converso 257

Captulo 17: Os Construtores de Cpia e de Movimento259


Copiando um Objeto 259
Por que voc precisa do construtor de cpia  260
Usando o construtor de cpia 260

PF_CG_C++FD_Book.indb 13 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
xiv C++ Para Leigos

O Construtor de Cpia Automtico 262


Criando Cpias Superficiais versus Cpias Profundas 263
Um Longo Caminho at os Temporrios 267
Evitando temporrios, permanentemente 268
O construtor de movimento 269

Captulo 18: Membros Estticos: Ser que


Amaciante de Roupa Pode Ajudar?273
Definindo Um Membro Esttico 273
Por que voc precisa de membros estticos 274
Usando membros estticos 274
Referindo-se aos membros de dados estticos 275
Usos para membros de dados estticos 276
Declarando Funes
Membro Estticas 277
Mas Sobre o Que isso Afinal? 280

Parte IV: Herana 283


Captulo 19: Herdando uma Classe285
Eu Preciso da Minha Herana? 286
Como uma Classe Herda? 287
Usando uma subclasse 289
Construindo uma subclasse 290
Destruindo uma subclasse 291
Herdando construtores 291
Tendo um Relacionamento TEM_UM 292

Captulo 20: Examinando Funes de Membro


Virtuais: Elas So Reais?295
Por Que Voc Precisa de Polimorfismo 298
Como o Polimorfismo Funciona  299
Quando No uma Funo Virtual? 300
Considerando Observaes Virtuais 302

Captulo 21: Fatorando Classes305


Fatorando 305
Implementando Classes Abstratas 309
Descrevendo o conceito de classe abstrata 310
Criando uma classe honesta a partir de uma classe abstrata 312
Passando classes abstratas 312

Parte V: Segurana 315


Captulo 22: Um Novo Operador de Atribuio,
Caso Voc Decida Aceit-lo317
Comparando Operadores com Funes 317
Inserindo um Novo Operador 318

PF_CG_C++FD_Book.indb 14 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Sumrio xv
Criar Cpias Superficiais um Grande Problema 319
Sobrecarregando o Operador de Atribuio 320
Sobrecarregando o Operador de ndice 325
O Construtor e o Operador de Movimento  326

Captulo 23: Usando o Fluxo de I/O 329


Como Funciona o Fluxo de I/O  329
Objetos de fluxo padro 330
Fluxo de Entrada/Sada  331
Modos de abertura 333
Ei, arquivo, em qual posio voc est? 334
Voc pode me mostrar um exemplo? 334
Outros Mtodos das Classes de Fluxo 337
Lendo e escrevendo fluxos diretamente 339
Controlando formatos 341
Qual o problema com endl? 343
Posicionando o ponteiro dentro de um arquivo 343
Usando as Subclasses stringstream 344
Manipulando os Manipuladores 347

Captulo 24: Tratamento de Erros Excees351


Justificando um Mecanismo de Erro Novo? 353
Examinando o Mecanismo de Exceo 354
Que Tipos de Coisas Eu Posso Lanar? 357
Apenas Passando 359

Captulo 25: Herdando Heranas Mltiplas361


Descrevendo o Mecanismo de Herana Mltipla 361
Acertando as Ambiguidades de Herana 363
Adicionando Herana Virtual 364
Construindo Objetos de Herana Mltipla 370
Expressando uma Opinio Contrria 371

Captulo 26: Templates Tentadores em C++373


Generalizando uma Funo em um Gabarito(Template) 374
Modelos de Classe 376
Dicas para Usar Gabaritos 379
Instanciaes de Modelo Externo 380
Implementando uma Lista Inicializadora 380

Captulo 27: Padronizando na Biblioteca


Padro de Gabaritos (STL)383
O Continer string 384
Iterando as Listas 389
Abrindo caminho por uma lista 390
Operaes em uma lista inteira 392
Voc pode me mostrar um exemplo? 392

PF_CG_C++FD_Book.indb 15 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
xvi C++ Para Leigos

Captulo 28: Escrevendo Cdigo a Prova de Hackers395


Entendendo os Motivos dos Hackers 395
Entendendo Injeo de Cdigo 398
Examinando um exemplo de injeo de SQL 398
Evitando injeo de cdigo 400
Estourando Buffers por Diverso e Lucro 401
Posso ver um exemplo? 401
Como uma chamada empilha?  404
Hackeando BufferOverflow 408
Evitando estouro de buffer primeira tentativa 412
Evitando estouro de buffer segunda tentativa 413
Outro argumento para a classe string 416
Por que no usar funes string sempre? 417

Parte VI: A Parte dos Dez 421


Captulo 29: 10 Maneiras de Evitar Adicionar
Bugs ao Seu Programa423
Habilitando Todos os Avisos e Mensagens de Erro 423
Adote um Estilo de Cdigo Limpo e Consistente 424
Limite a Visibilidade 425
Comente Seu Cdigo Enquanto Voc o Escreve 426
Verifique Cada Passo Pelo Menos Uma Vez 427
Evite Operadores Sobrecarregados 427
Controle o Heap Sistematicamente 427
Use Excees para Tratar Erros 428
Declare Destrutores Virtuais 428
Evite Herana Mltipla 430

Captulo 30: 10 Maneiras de Proteger Seus


Programas dos Hackers431
No Tire Concluses sobre a Entrada de Usurio 432
Tratando Falhas com Elegncia 433
Mantendo um Log do Programa 434
Siga um Bom Processo de Desenvolvimento 435
Implemente um Bom Controle de Verso 436
Autentique os Usurios com Segurana 437
Gerencie Sesses Remotas 440
Complique Seu Cdigo 441
Assine Seu Cdigo com um Certificado Digital 444
Use Criptografia Sempre Que Necessrio 445

ndice 447

PF_CG_C++FD_Book.indb 16 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Introduo

B em-vindos ao C++ Para Leigos, Traduo da 7 Edio. Pense neste


livro como Edio Essencial do Leitor, trazendo at voc tudo que
voc precisa saber sobre comear a programar sem aquele papo chato.

Sobre Este Livro


C++ Para Leigos uma introduo a linguagem C++. Eu comeo do incio
(por onde mais?) e apresento dos conceitos novos at tcnicas mais
sofisticadas. No suponho que voc possua nenhum conhecimento prvio
(pelo menos, no em programao).

Este livro cheio de exemplos. Cada conceito documentado em


inmeros trechos e diversos programas completos.

Diferente dos outros livros, C++ Para Leigos considera o porqu to


importante quanto o como. Os recursos de C++ so como uma pea
de quebra-cabea. Em vez de apenas apresentar os recursos, eu acho
importante que voc entenda como eles se encaixam. Voc tambm pode
usar o livro como uma referncia: se quiser entender mais sobre Templates
(Gabaritos), pule para o Captulo 26. Cada captulo contm referncias
necessrias para os captulos anteriores caso voc no leia os captulos em
sequncia.

C++ Para Leigos no considera um sistema operacional especfico.


to prtico para programadores Macintosh ou Linux quanto para
desenvolvedores Windows. O livro no aborda nem programao
Windows nem .NET.

Voc tem que dominar uma poderosa linguagem de programao, como


C++, mesmo que seu primeiro plano seja se tornar um programador da
aplicao Windows ou .NET. Quando voc terminar C++ Para Leigos,
estar apto a continuar na sua rea de especializao, qualquer que seja.

Em uma poca to moderna cheia de hackers, aprender programao


defensiva importante, mesmo para iniciantes, ento eu abordo conceitos
importantes para prevenir que seu programa seja hackeado.

PF_CG_C++FD_Book.indb 1 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
2 C++ Para Leigos

O que C++?
C++ uma linguagem padro de baixo nvel C++ foi certificada como padro 99,9% puro,
e orientada a objeto. Sendo uma linguagem o que faz ela ser uma linguagem porttil. Um
de baixo nvel parecida e compatvel com seu compilador padro C++ existe na maioria
antecessor C, C++ pode gerar programas mui- dos sistemas operacionais. Algumas verses
to rpidos e eficientes. Geralmente usada suportam extenses da linguagem bsica
para criao de jogos, software de grficos, principalmente, Visual Studio e Visual Studio
controle de hardware e outras aplicaes em Express da Microsoft incluem um compilador
que o desempenho realmente conta. C++ que implementa vrias extenses que
permite que seus programas interajam melhor
Como uma linguagem orientada a objeto, C++
com outras linguagens .NET. Apesar disso, se-
tem o poder e a agilidade de escrever pro-
ria melhor se os alunos aprendessem o padro
gramas em grande escala. C++ uma das
C++ primeiro. Aprender as extenses fcil,
linguagens de programao mais populares
uma vez que voc domine o bsico demons-
para todos os tipos de programas. A maioria
trado aqui.
dos programas que voc usa em seu compu-
tador todos os dias so escritos em C++ (ou
seu subconjunto, a linguagem C).

Quando eu descrevo uma mensagem que voc v na tela, ela aparece


desta forma:

Hi mom!

Alm disso, a lista de cdigos aparece assim:

// algum programa
int main()
{
...
}

Se voc est entrando nesses programas manualmente, voc precisa inserir


o texto exatamente como mostrado, com uma exceo: a quantidade de
espaos em branco (espaos, tabulaes, e linhas novas) no relevante.
Voc no pode colocar um espao no meio de uma palavra-chave, mas
voc no precisa se preocupar em inserir espaos a mais ou a menos.

Porm, diferenciar maisculas e minsculas importantssimo. Se ele diz


int, ele no est dizendo Int ou INT!

PF_CG_C++FD_Book.indb 2 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Introduo 3
As palavras reservadas do C++ normalmente so baseadas em palavras
inglesas com sentidos parecidos. Isso pode dificultar a leitura de uma
frase contendo ingls e C++, caso no haja um pouco de assistncia.
Para dar uma mozinha, os nomes dos comandos e funes em C++
aparecem em fonte diferente, deste jeito. Alm disso, os nomes
das funes so sempre seguidos de parnteses aberto e fechado,
como myFavoriteFunction(). Os argumentos para a funo s so
mencionados quando h uma necessidade especfica de facilitar a leitura.

s vezes, irei lhe pedir pra usar comandos de menu, como File Open.
Essa instruo quer dizer para usar o teclado ou mouse para abrir o menu
File e escolher a opo Open.

Cada recurso novo introduzido como resposta para estas trs perguntas:

55 O que este recurso novo?


55 Por que ele foi introduzido na linguagem?
55 Como ele funciona?

Pedaos pequenos de cdigo esto espalhados pelos captulos. Cada


um demonstra um recurso recm-introduzido ou destaca algum ponto
importante. Esses trechos podem no estar completos e certamente no
fazem nada de relevante. No entanto, cada conceito demonstrado em,
pelo menos, um programa funcional para que voc pode executar e
brincar no seu prprio computador.

Um programa do mundo real pode tomar muitas pginas. Porm, ver tal
programa uma ferramenta didaticamente importante para qualquer
leitor. Eu inclu uma srie de programas junto com uma explicao de
como eles funcionam.

Eu uso um programa simples que chamo de BUDGET. O programa


comea a vida como um simples e orientado funcionalmente
BUDGET1. Esse programa mantm um conjunto de contas bancarias
simples, corrente e poupana. O leitor motivado a revisar esse
programa no final da Parte II. A verso seguinte, BUDGET2, adiciona os
conceitos de orientao a objeto apresentados na Parte III. Os exemplos
vo evoluindo, usando mais e mais recursos da linguagem, at terminar
em BUDGET5, que voc deve revisar aps dominar todos os captulos
no livro. Os programas BUDGET esto includos com o cdigo-fonte
do livro disponvel para download em www.altabooks.com.br,
procurando pelo ttulo do livro.

PF_CG_C++FD_Book.indb 3 05/05/2016 13:51:36


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
4 C++ Para Leigos

cones Usados Neste Livro


CIALISTA
PE
O DE ES

rea tcnica que voc pode pular em uma primeira leitura.


AP

As dicas destacam um ponto que pode poupar muito tempo


e esforo.

E-SE
BR
LEM

Lembre-se disso. importante.

Lembre-se disso, tambm. Ele pode espionar quando voc menos esperar e
gerar um daqueles bugs difceis de encontrar.

Esse cone sinaliza algumas adies de 2011 na linguagem comparada ao


padro anterior (conhecido como C++ 2003). Se voc j familiarizado com
C++ e algo parece completamente novo ou se algo no funciona com sua
verso atual das ferramentas C++, pode ser por causa da adio de 2011.

Esse cone sinaliza adies propostas ao padro C++ 2014. Esses recursos
no esto implementados no Code::Blocks/gcc que est disponvel
at o momento desta escrita. Talvez eles estejam disponveis em www.
codeblocks.org at voc ler isto.

Alm do Livro
C++ Para Leigos inclui estes servios online de fcil download:

55 Voc pode acessar a Folha de Cola Online, atravs do endereo:


www.altabooks.com.br. Procure pelo ttulo do livro/ISBN. Na
pgina da obra, em nosso site, faa o download completo da Folha
de Cola, bem como de erratas e possveis arquivos de apoio. Os
iniciantes vo querer imprimir e deixar de fcil acesso enquanto l
todos os captulos. Como o socialismo assustador, eventualmente,
a sintaxe C++ vai se tornar sua segunda lngua e voc no precisar
mais da folha de cola.

PF_CG_C++FD_Book.indb 4 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Introduo 5
55 O cdigo-fonte para todos os exemplos no livro podem ser baixados
no site da editora www.altabooks.com.br, procurando pelo ttulo
do livro. Os programas esto organizados pelo nmero do captulo.
Eu inclu um arquivo de projeto para Code::Blocks (mais sobre ele na
prxima parte, e explico os arquivos de projeto no Captulo 1).
55 Este livro usa o ambiente Code::Blocks de cdigo-fonte e o
compilador C++ GCC de graa. A verso do Code::Blocks usada na
escrita deste livro (Verso 13.12) est disponvel para download
em www.codeblocks.org/downloads/source/5. Eu inclu
verses para o Windows (2000 e posteriores) e Macintosh (10.6
e posteriores). As verses para o Linux esto disponveis online
tambm. O Captulo 1 contm instrues de como baixar e instalar
o Code::Blocks. Voc pode encontrar verses mais recentes de
Code::Blocks e verses para diferentes verses do Linux em www.
codeblocks.org/downloads/binaries.
55 Exceto pelo material disponibilizado em www.altabooks.com.br,
os sites indicados esto em ingls e a editora no se responsabiliza
pelo contedo, material ou permanncia de sites de terceiros.

Se voc realmente for em www.codeblocks.org , certifique-se de baixar


uma verso que possua o compilador gcc.

Se voc j possui um compilador C++ instalado em seu computador que


voc prefere usar, fique vontade contanto que seja compatvel com o
padro C++ (a maioria ). Nem todos os compiladores implementaram o
padro 2011 ainda, ento eu sinalizei essas extenses no livro. Alm disso,
se voc usar um compilador diferente, sua tela no se parecer muito com
as figuras do livro.

No recomendo usar os pacotes Visual Studio ou Visual Studio Express


com este livro. Ele contm muitas extenses designadas para serem
compatveis com o .NET Framework. Uma vez que voc aprenda C++ no
Code::Blocks, voc pode aprender programao .NET no Visual Studio.

De L Para C, Daqui Para L


Descobrir uma nova linguagem de programao no um esporte muito
sensacional. Tentarei tornar o menos doloroso possvel, mas voc tem
que ligar seu computador e mergulhar de cabea na programao.
Aquea bem os dedos, abra bem a lombada do livro para que ele fique na
horizontal perto do seu teclado (e para que voc no tenha como devolver
para a livraria), e mergulhe.

Se voc encontrar um problema, primeiro verifique no questionrio de


perguntas frequentes (FAQ) em www.stephendavis.com - em ingls.

PF_CG_C++FD_Book.indb 5 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Parte I
Comeando com
Programao em
comeando com
C++
Programao
em

PF_CG_C++FD_Book.indb 7 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Nesta parte...
55 Explicando a construo dos blocos
55 Declarando variveis
55 Definindo operadores matemticos
55 Usando operadores lgicos

PF_CG_C++FD_Book.indb 8 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Captulo 1

Escrevendo Seu Primeiro


Programa em C++
Neste captulo
XX
Descobrindo C++
XX
Instalando o Code::Blocks no Windows, Linux Ubuntu ou Macintosh OS X
XX
Criando seu primeiro programa em C++
XX
Executando seu programa

E nto, c estamos: ningum mais alm de voc e eu. Nada para fazer,
exceto comear. Mas vale esclarecer alguns conceitos fundamentais.

Um computador uma mquina magnificamente rpida, mas


incrivelmente estpida. Um computador pode fazer qualquer coisa que
voc pedir (dentro do possvel), mas ele faz exatamente o que foi pedido
nada a mais e nada a menos.
Talvez, infelizmente para ns, os computadores no entendam nenhuma
linguagem humana adequada eles tambm no falam ingls. Ah, j sei
o que eu voc vai dizer: j vi computadores que entendiam ingls. O
que voc realmente viu foi um computador executando um programa que
entendia ingls moderadamente.
Os computadores entendem uma linguagem geralmente chamada de
linguagem de computao ou linguagem de mquina. possvel, mas
extremamente difcil para os seres humanos falarem linguagem de
mquina. Entretanto, computadores e humanos deram um jeito de se
entender usando linguagens intermedirias como C++. Os humanos podem
falar C++ (mais ou menos), e C++ pode ser convertido em linguagem de
mquina para que o computador entenda.

PF_CG_C++FD_Book.indb 9 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
10 Parte I: Comeando com Programao em C++

Dominando Conceitos de C++


Um programa C++ um arquivo de texto contendo uma sequncia de
comandos C++ unidos de acordo com as regras da gramtica C++. Esse
arquivo de texto conhecido como arquivo-fonte (provavelmente porque
a fonte de todos os problemas). Um arquivo-fonte C++ geralmente recebe
a extenso .CPP assim como um arquivo do Adobe Acrobat termina em
.PDF ou um arquivo batch do MS-DOS (se lembra disso?) termina em .BAT.

O objetivo de programar em C++ escrever uma sequncia de comandos


que podem ser convertidos em um programa de linguagem de mquina que
realmente faz o que queremos. Essa converso chamada de compilao e
funo do compilador. O cdigo de mquina que voc escreveu tem que
ser combinado com configuraes e instrues de desmontagem e algumas
rotinas padres de bibliotecas em um processo chamado ligao. Juntos,
compilar e ligar so conhecidos como construir. Os arquivos de mquina
executveis gerados recebem a extenso .EXE no Windows. Eles no
recebem nenhuma extenso em especfico no Linux ou no Macintosh.

Isso parece bem fcil ento qual o problema? Prossiga.

Para escrever um programa, voc necessita de dois programas especficos.


Um (um editor) o que voc usa para escrever seu cdigo enquanto
voc executa seu arquivo-fonte .CPP. O outro (um compilador) converte
seu arquivo-fonte em um arquivo de mquina executvel que carrega
seus comandos reais (abrir uma planilha, emitir rudos estranhos, rebater
asteroides na rbita, o que quer que seja).

Hoje em dia, os desenvolvedores de ferramenta normalmente


associam compilador e editor em um nico pacote um ambiente de
desenvolvimento. Aps terminar de inserir os comandos que criam seu
programa, voc necessita somente clicar em um boto para construir o
arquivo executvel.

Felizmente, existem ambientes de domnio pblico em C++. Eu uso um


deles neste livro o ambiente Code::Blocks. Esse editor funcionar com
muitos compiladores diferentes. Mas a verso do Code::Blocks associada
ao compilador GNU gcc usada para escrever este livro est disponvel para
download no Windows, no Macintosh e em vrias verses do Linux, como
descrito na parte de instalao deste captulo.

Apesar do Code::Blocks ser de domnio pblico, h um incentivo para que


voc pague uma pequena taxa para apoiar seu desenvolvimento contnuo.
Voc no tem que pagar para usar Code::Blocks, mas voc pode contribuir
para a causa, se quiser. Veja o site do Code::Blocks para mais detalhes.

PF_CG_C++FD_Book.indb 10 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Captulo 1: Escrevendo Seu Primeiro Programa em C++ 11
Eu testei os programas deste livro no Code::Blocks 13.12 que vem com a
verso 4.7.1 do gcc includo. Essa verso do gcc implementa a maioria dos
padres C++ 2011.

Voc pode usar verses diferentes do gcc ou compiladores diferentes,


se voc preferir, mas talvez eles no implementem o padro 2011 por
completo. Por esse motivo, as extenses 2011 esto marcadas com o cone
'11 ao lado.

O compilador gcc no implementava nenhuma das extenses adicionadas


ao padro C++ 2014 enquanto eu escrevi este livro, mas eu o inclu, onde
aplicvel, porque algum dia ele ser.

Tudo bem, eu admito: este livro um pouco centrado no Windows. Eu


testei todos os programas do livro no Windows 2000/XP/Vista/7/8, Linux
Ubuntu e Macintosh OS X. Eu aponto as diferenas entre os sistemas
operacionais no texto.

Alm disso, eu incluo instrues de instalao para cada um dos sistemas


operacionais acima neste captulo. As verses do Code::Blocks e do gcc
esto disponveis para outras verses do Linux e do Macintosh OS. Os
programas devem funcionar com essas tambm.

O pacote Code::Blocks/gcc gera programas de 32 bits, mas no suporta


facilmente criar programas em janelas. Os programas deste livro so
executados a partir de um prompt de linha de comando e escrevem para a
linha de comando. To entediante quanto isso parece ser, eu recomendo
que voc trabalhe primeiro pelos exemplos deste livro para aprender C++
antes de lidar com desenvolvimento em janelas. Programao em C++ e no
Windows so duas coisas distintas e (para o bem da sua sanidade) devem
permanecer assim na sua mente.

Siga os passos na prxima seo para instalar o Code::Blocks e montar seu


primeiro programa em C++. O objetivo desse programa converter um
valor de temperatura inserido pelo usurio de grau Celsius para Fahrenheit.

Instalando o Code::Blocks
O site www.codeblocks.org possua a verso mais recente do
ambiente Code::Blocks na poca desta escrita para Windows, Linux
Ubuntu e Macintosh OS X 10.6 ou posterior. Siga as instrues de
instalao que se aplicam ao seu sistema operacional abaixo.

PF_CG_C++FD_Book.indb 11 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
12 Parte I: Comeando com Programao em C++

Windows
O ambiente Code::Blocks vem em um arquivo executvel de fcil
instalao que compatvel com todas as verses do Windows aps o
Windows 2000. Eis um resumo da instalao do ambiente:
1. Faa o download do executvel codeblocks-13.12.mingw-
setup.exe em www.codeblocks.org/downloads/
source/5.

Salve o executvel em sua rea de trabalho ou em algum lugar fcil


de encontrar.

A verso 4.71 do compilador GCC est includa. Essa no a verso


mais nova mas a recomendada pelo Code::Blocks. Se voc quiser
a verso 4.81 mais atualizada e com pequenos bugs, voc pode
fazer o download e instalar codeblocks-13.12.mingwsetup-
TDM-GCC-481.exe. Eu testei os programas deste livro com as duas
verses mas usei a verso 4.71 para esta escrita.

2. Clique duas vezes no programa aps o download completo.

3. Dependendo da verso do Windows que voc estiver usando,


pode aparecer o tradicional aviso pop-up Um programa no
identificado quer acessar o seu computador. Se for o caso,
clique em Permitir para iniciar a instalao.

4. Clique em Next depois de fechar todas as aplicaes abertas


como voc foi avisado na caixa de dilogo Welcome do
Code::Blocks Setup Wizard.

5. Leia o End User License Agreement (mais conhecido


como EULA) e ento clique I agree se voc puder viver sob
essas condies.

Na verdade, voc no tem muitas opes o pacote no ser


instalado se voc no aceitar. Presumindo que voc realmente clique
em OK, o Code::Blocks abre uma caixa de dilogo mostrando as
opes de instalao. As opes padro esto corretas.

6. Clique no boto Next.

O programa de instalao permite que voc instale somente um


subconjunto dos recursos. Voc precisa selecionar ao menos Default
Install e o MinGW Compiler Suite. O padro instalar tudo a
melhor opo.

Se o MinGW Compiler Suite no estiver nas opes, voc deve ter


instalado a verso do Code::Blocks que no inclui o gcc. Essa verso
no funcionar corretamente.

PF_CG_C++FD_Book.indb 12 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
Captulo 1: Escrevendo Seu Primeiro Programa em C++ 13
7. Clique Install e aceite o Destination Folder padro.

O Code::Blocks comea a copiar um grande nmero de arquivos


para o seu disco rgido. Depois, ele pergunta Do you want to run
Code::Blocks now?

8. Clique Yes para iniciar o Code::Blocks.

O Code::Blocks perguntar qual compilador voc pretende usar. O


padro GNU GCC Compiler a seleo adequada.

9. Dentro de Code::Blocks, escolha Settings Compiler.

10. Selecione a aba Compiler Flags.

11. Certifique-se de selecionar as trs opes, como mostra


a Figura 1-1:

yy
Enable All Compiler Warnings

yy
Have g++ Follow the Coming C++0x ISO C++ Language Standard

yy
Have g++ Follow the C++11 ISO C++ Language Standard

O padro C++ 2011 era para ser o padro C++ 2008 ou 2009. Como
no estava claro, o padro ficou conhecido como o padro 0x. Ele
no foi completamente aceito at 2011. No gcc, C++ 0x e C++ 11 se
referem ao mesmo padro.

Figura 1-1:
Verifique se
as opes
Enable All
Compiler
Warnings
e C++ 2011
esto
marcadas.

PF_CG_C++FD_Book.indb 13 05/05/2016 13:51:37


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro
14 Parte I: Comeando com Programao em C++

12. Selecione a aba Toolchain Executables. Ela deve se parecer


com a Figura 1-2.

O local padro para o compilador gcc o subdiretrio MinGW\bin


dentro do diretrio Code::Blocks

Se o local padro estiver vazio, ento Code::Blocks no sabe onde


o compilador gcc est e no ser possvel montar seus programas.
Certifique-se de fazer o download da verso do Code::Blocks que
contm o gcc e de incluir o MinGW durante a instalao. Se voc
estiver usando um compilador gcc existente que voc j tenha
instalado, voc dever indicar ao Code::Blocks onde ele est
localizado no seu disco rgido.

13. Feche a caixa de dilogo Settings.

14. Clique em Next na caixa de dilogo Code::Blocks Setup e


depois em Finish para completar o programa de configurao.

O programa de configurao fecha.

Linux Ubuntu
O Code::Blocks no contm o gcc no Linux, portanto a instalao um
processo de dois passos. Primeiro, voc precisa instalar o gcc. Somente
depois voc poder instalar o Code::Blocks.

Figura 1-2:
Verifique se
o diretrio
de insta-
lao do
compilador
est
correto.

PF_CG_C++FD_Book.indb 14 05/05/2016 13:51:38


Prova:PF_CG_C++FD
Liberado por: Bianca Teodoro