apostila

Upload: patricia-calefi

Post on 12-Jul-2015

386 views

Category:

Documents


0 download

TRANSCRIPT

C++ e Orientao a Objetos

PET ComputaoFbio Beltro, Felipe Chies, Lucas Zawacki, Marcos Cavinato e Matheus Proena 2 Edio, 18 de Agosto de 2009

1 Edio por Arthur Ribacki, Gabriel Portal, Leonardo Chatain e Roslia Galiazzi

Sumrio1 Introduo ao C++ 1.1 Histria do C++ . . . . . . 1.2 Primeiros Programas . . . . 1.3 Namespaces . . . . . . . . . 1.4 Variveis Locais e Globais . 1.5 Tipos de Dados . . . . . . . 1.6 Modicadores . . . . . . . . 1.7 Estruturas de Controle . . . 1.8 Funes . . . . . . . . . . . 1.8.1 Funes inline . . . . 1.8.2 Parmetros Default 1 1 2 4 4 5 5 6 6 8 8 13 13 14 14 16 17 18 21 21 22 23 25 25 25 26 28 29 29 30 30

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Introduo a Orientao a Objetos 2.1 Uma classe Carro . . . . . . . . . . . 2.2 Classes . . . . . . . . . . . . . . . . . 2.2.1 Encapsulamento . . . . . . . 2.2.2 Membros Pblicos e Privados 2.2.3 Construtores e Destrutores . 2.2.4 Diviso de Arquivos . . . . . 2.3 Composio . . . . . . . . . . . . . . 2.4 Objetos Constantes . . . . . . . . . . 2.5 Funes Membro Constantes . . . . 2.6 Ponteiro this . . . . . . . . . . . . .

3 Sobrecarga 3.1 Quando usar? . . . . . . . . . . . . . . . . . 3.2 Modicador friend . . . . . . . . . . . . . . 3.3 Fundamentos de Sobrecarga de Operadores 3.4 Funes Friend . . . . . . . . . . . . . . . . 3.4.1 Sintaxe . . . . . . . . . . . . . . . . 3.5 Sobrecarga de Operadores Unrios . . . . . 3.6 Sobrecarga de Operadores Binrios . . . . . 3.7 Sobrecarga dos Operadores de Streams . . .

4

SUMRIO 3.7.1 Exemplo dos operadores de streams ( e ) . . . . . . Converso entre Tipos . . . . . . . . . . . . . . . . . . . . . . Sobrecarregando ++ e - - . . . . . . . . . . . . . . . . . . . . 31 32 32 33 33 35 35 35 37 39 41 41 42 42 45 45 47 47 47 49 49 51 51 51 52 52 52 53 53 53 55 57 59 59 60 60 62

3.8 3.9

4 Herana 4.1 Classe base e Classes Derivadas: . . . . . . . . . . . . . . . . 4.2 Membros Protected . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Sintaxe . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.2 Exemplos de Herana . . . . . . . . . . . . . . . . . . 4.3 Coero de ponteiros entre classes bases e classes derivadas . 4.4 Sobrescrevendo membros da classe base em uma classe derivada 4.4.1 Output . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Tipos de Herana . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Herana Mltipla . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Output . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Funes Virtuais e Polimorsmo 5.1 Funes Virtuais . . . . . . . . . . . . . . . 5.1.1 Teste de Aprendizado . . . . . . . . 5.2 Ponteiros Polimorfos como Parmetros . . . 5.2.1 Teste de Aprendizado . . . . . . . . 5.3 Classes Base Abstratas e Classes Concretas 5.3.1 Teste de Aprendizado . . . . . . . . 6 Templates e Excees 6.1 Templates para Funes 6.1.1 Sintaxe . . . . . 6.1.2 Exemplo . . . . . 6.2 Template de Classe . . . 6.2.1 Sintaxe . . . . . 6.2.2 Exemplo . . . . . 6.3 Introduo a Excees . 6.4 Try, Throw e Catch . . 6.4.1 Exemplo . . . . . 6.4.2 Exerccio . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

. . . . . . . . . .

7 Processamento de Arquivos 7.0.3 Arquivos em C++ . 7.0.4 Arquivo Seqencial . 7.0.5 Modos de Abertura 7.1 Arquivo Aleatrio . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

SUMRIO 8 Standard Template Library 63 8.1 Conhecendo a STL . . . . . . . . . . . . . . . . . . . . . . . . 63 8.2 Continers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 8.3 Funes Membro Comuns . . . . . . . . . . . . . . . . . . . . 64 8.4 Funes Membro Especcas . . . . . . . . . . . . . . . . . . . 65 8.4.1 Arquivos de Cabealho . . . . . . . . . . . . . . . . . . 65 8.5 Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.5.1 Teste de Aprendizado . . . . . . . . . . . . . . . . . . 66 8.6 Como lidar com capacidade ilimitada, ou como o Vector no mgico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.6.1 Observao . . . . . . . . . . . . . . . . . . . . . . . . 69 8.7 List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.8 Outros Containers . . . . . . . . . . . . . . . . . . . . . . . . 70 8.9 Iteradores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.10 Algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 8.10.1 Usando o Algoritmo Sort para qualquer Ordenao . . 75 8.11 Usando a STL com Classes Prprias . . . . . . . . . . . . . . 75 8.11.1 Teste de Aprendizado . . . . . . . . . . . . . . . . . . 78 8.12 ltimas Consideraes . . . . . . . . . . . . . . . . . . . . . . 78

5

Captulo 1

Introduo ao C++Antes de comearmos o estudo da linguagem, necessrio que se entenda por que to importante aprender C++. Existe, atualmente, uma demanda muito grande por software, que deve ser construdo rpida, correta e economicamente. A orientao a objetos surge com o objetivo de ajudar a suprir essa demanda. Fortemente baseada no princpio de reutilizao de componentes e estreitamente ligada engenharia de software, permite uma reduo do tempo de implementao bastante signicativa. Alm disso, atravs de uma organizao modular e independente, melhora a manutenabilidade e aumenta a conabilidade dos programas.

1.1

Histria do C++

A linguagem de programao C foi desenvolvida pela AT&T com o propsito de escrever um sistema operativo para a srie de computadores PDP-11 que acabaria por ser o sistema operativo UNIX. O C foi desenvolvido com o principal objetivo de ser eciente. Bjarne Stroustrup, tambm da AT&T, desenvolveu o C++ para acrescentar construes orientadas a objetos na linguagem C. C++ pode ser visto como uma linguagem procedimental com alguns construtores adicionais. Comeando pelo C, alguns construtores para programao orientada a objetos e para melhorar a sintaxe procedimental foram acrescentados. Como j dito anteriormente, um programa bem escrito em C++ ir reetir elementos tanto do estilo de programao orientada a objetos como programao procedimental clssica. E isto porque o C++ uma linguagem extensvel, ou seja, podemos denir novos tipos de tal maneira que eles ajam do mesmo modo que tipos pr-denidos que j fazem parte da linguagem padro.

2

Introduo ao C++

1.2

Primeiros Programas

Iniciaremos o estudo com um pequeno exemplo, que demonstrar algumas diferenas sintticas de C++ em relao linguagem C. O programa apenas escreve Hello World! no console, como todo bom primeiro programa em uma linguagem de programao. A seguir, cada parte do programa ser vista em detalhe.

Cdigo 1.1: Hello World// Pr i me ir o programa C++ #include i n t main ( ) { s t d : : c o u t