• Nenhum resultado encontrado

Introdução à Programação Orientada a Objetos com C++ Antonio Mendes da Silva Filho

N/A
N/A
Protected

Academic year: 2021

Share "Introdução à Programação Orientada a Objetos com C++ Antonio Mendes da Silva Filho"

Copied!
22
0
0

Texto

(1)

Introdução à Programação

Orientada a Objetos com C++

Antonio Mendes da Silva Filho

(2)

Preencha a ficha de cadastro no final deste livro e receba gratuitamente informações sobre os lançamentos e as promoções da Elsevier.

Consulte também nosso catálogo completo, últimos lançamentos e serviços exclusivos no site

www.elsevier.com.br

(3)

Introdução à Programação

Orientada a Objetos com C++

Antonio Mendes da Silva Filho

(4)

CIP-Brasil. Catalogação-na-fonte. Sindicato Nacional dos Editores de Livros, RJ

_________________________________________________________________________

_________________________________________________________________________ S58i Silva Filho, Antonio Mendes da

Introdução à programação orientada a objetos com C++ / Antonio Mendes da Silva Filho. – Rio de Janeiro: Elsevier, 2010. ISBN 978-85-352-3702-3

1. Programação orientada a objetos (Computação). 2. C++ (Linguagem de programação de computador) I. Título.

10-0446.

CDD: 005.117 CDU: 004.21 © 2010, Elsevier Editora Ltda.

Todos os direitos reservados e protegidos pela Lei no 9.610, de 19/02/1998.

Nenhuma parte deste livro, sem autorização prévia por escrito da editora, poderá ser reproduzida ou transmitida sejam quais forem os meios empregados: eletrônicos, mecânicos, fotográficos, gravação ou quaisquer outros.

Copidesque: Ivone Teixeira Revisão: Marco Antônio Corrêa

Editoração Eletrônica: SBNigri Artes e Textos Ltda.

Elsevier Editora Ltda. Conhecimento sem Fronteiras Rua Sete de Setembro, 111 – 16o andar

20050-006 – Centro – Rio de Janeiro – RJ – Brasil Rua Quintana, 753 – 8o andar

04569-011 – Brooklin – São Paulo – SP – Brasil Serviço de Atendimento ao Cliente

0800-0265340 [email protected] ISBN 978-85-352-3702-3

Nota: Muito zelo e técnica foram empregados na edição desta obra. No entanto, podem ocorrer erros de digitação, impressão ou dúvida conceitual. Em qualquer das hipóteses, solicitamos a comunicação ao nosso Serviço de Atendimento ao Cliente, para que possamos esclarecer ou encaminhar a questão.

Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens, originados do uso desta publicação.

(5)

Dedicatória

À minha esposa Viviane e aos filhos Vivian e Anthony, em reconhecimento aos

muitos momentos de convívio cedidos e constante apoio dado durante a realização

deste livro. Ao meu pai Antonio e à minha mãe Eunide (

in memoriam) pelo ininterrupto

afeto e simplicidade dos ensinamentos.

(6)
(7)

Sobre o Autor

Professor e consultor em área de Tecnologia da Informação e Comunicação,

com mais de 20 anos de experiência profissional, é autor do livro

Arquitetura de Software,

pela Editora Campus/Elsevier, possui diversos artigos publicados em eventos

nacio-nais e internacionacio-nais, é colunista de Ciência e Tecnologia na revista

Espaço Acadêmico,

com mais de cem artigos publicados, tendo feito palestras em eventos nacionais e no

exterior. Foi professor visitante da University of Texas, em Dallas, e da University of

Ottawa. Formado em Engenharia Elétrica pela Universidade de Pernambuco, com

mestrado em Engenharia Elétrica pela Universidade Federal da Paraíba (Campina

Grande), mestrado em Engenharia da Computação pela University of Waterloo e

doutorado em Ciência da Computação pela Univesidade Federal de Pernambuco.

(8)
(9)

Agradecimentos

Este livro é um relato de recente trabalho na área de introdução à programação

em cursos de computação e engenharias. Ao longo de minha jornada como docente,

tive a oportunidade de trocar ideias e interagir com alunos e outros interessados e

pude perceber que o aprendizado é um processo que se constrói passo a passo.

Nes-se processo, utilizar exemplos e levantar questionamentos sobre possíveis soluções

ajuda o aluno (aprendiz) a assimilar de maneira mais efetiva o conteúdo. Agradeço

a cada um dos alunos que ao longo de anos de ensino contribuíram com perguntas

e curiosidades para a formação desse conteúdo. Também gostaria de agradecer aos

colegas por serem pacientes com minha falta de atenção e afastamento enquanto

escrevia este livro. Por fim, gostaria também de agradecer à Editora Campus/Elsevier

e a toda equipe pelo empenho e dedicação na realização deste livro.

Antonio Mendes da Silva Filho

(10)
(11)

A quem se destina o livro

Quem deve ler e beneficiar-se deste livro? Ele é recomendado a estudantes dos

cursos de computação, engenharias e correlatos de universidades e outras instituições

de ensino superior, uma vez que contempla o conteúdo exigido nesses cursos.

(12)
(13)

Apresentação

A programação orientada a objetos (POO) é uma abordagem de

programa-ção que serve de elo entre os problemas existentes e as soluções computacionais

apresentadas no campo da programação. Antes da POO havia um obstáculo

con-ceitual para os programadores quando eles tentavam adaptar as entidades reais às

restrições impostas pelas linguagens e técnicas de programação tradicionais. Em uma

situação real, o ser humano tende a raciocinar em termos dos objetos ou entidades

reais. Todavia, vale lembrar que, antes da POO, os programadores eram ensinados a

raciocinar sobre os problemas em termos de blocos de código ou procedimentos e

forma como eles atuavam sobre os dados. Observe que essas duas abordagens são

distintas e constituem um problema quando existe necessidade de desenvolver um

sistema complexo.

A POO apresenta-se como um paradigma de programação que permite aos

programadores raciocinar e solucionar problemas em termos de objetos, os quais

estão diretamente associados às entidades ou “coisas” reais. Como resultado desse

mapeamento natural, utilizando a POO um programador pode concentrar-se nos

objetos que compõem o sistema, em vez de tentar vislumbrar o sistema como um

conjunto de procedimentos e dados. Vale salientar que a POO é uma forma natural

e lógica pela qual os seres humanos, especificamente os programadores, raciocinam.

Os benefícios resultantes de empregar a POO como abordagem de programação não

se restringem a raciocinar e resolver problemas em termos de objetos ou entidades

reais, mas implicam a reutilização de código.

Além da identificação de uma técnica de programação adequada para

imple-mentação de sistemas, há a necessidade de selecionar uma linguagem de programação.

Neste texto, é empregada a linguagem C++ desenvolvida nos laboratórios da Bell por

Bjarne Stroustrup. Embora a C++ mantenha algumas semelhanças com a linguagem

C, oferece menor possibilidade de erros. Além disso, a C++ suporta características

como, por exemplo, polimorfismo, herança e ocultação de dados, entre outras. Na

(14)

prática, as diferenças entre C e C++ são maiores do que se possa imaginar.

Programa-dores de C++ não apenas fazem uso dos aspectos da POO de C++ como também

incrementam e aperfeiçoam os recursos oferecidos pela linguagem C. Nesse sentido,

o objetivo deste livro é ajudar o leitor a solucionar problemas escrevendo programas

em C++ e explorando recursos da orientação a objetos no menor tempo possível.

Devido ao exposto e à grande importância que a POO tem no contexto atual

entre os paradigmas de programação, um texto didático que faça a introdução de

pro-gramação orientada a objetos usando a linguagem C++ tem como objetivo fornecer

os conceitos necessários aos estudantes de computação, engenharias e áreas afins.

(15)

Sumário

Capítulo 1 – panorâmiCada programação orientadaa objetos ...1

Objetivos ...1

1.1. Introdução ...1

1.2. Origem da Programação Orientada a Objetos ...2

1.3. Limitações das Linguagens Procedimentais ...3

1.3.1. Linguagens Procedimentais ...3

1.3.2. Divisão do Programa em Funções ...4

1.3.3. Programação Estruturada ...4

1.3.4. Dados – Componente Essencial na Modelagem de um Sistema ...5

1.3.5. Uso de Variáveis em Linguagens de Programação Estruturada ...5

1.3.6. Problemas de Programas Procedimentais ...7

1.4. Características das Linguagens Orientadas a Objetos ...7

1.4.1. A Abordagem de Orientação a Objetos ...7

1.4.2. Encapsulamento de Dados ...8

1.4.3. Raciocínio em Termos de Objetos ...9

1.4.4. Classe ...9

1.4.5. Herança ...10

1.4.6. Reusabilidade ...11

1.4.7. Criação de Novos Tipos de Dados ...11

1.4.8. Polimorfismo e Overloading (Sobrecarga) ...12

1.5. Diferenças entre C e C++ ...12

Resumo ...13

Questões ...13

Exercícios ...13

Capítulo 2 – Componentesda linguagem C++ ...15

Objetivos ...15

(16)

2.1. Introdução ...15

2.2. Construção de um Programa ...16

2.2.1. Criando um Projeto no Ambiente Dev-C++ ...16

2.2.2. Criando um Arquivo no Dev-C++ ...17

2.2.3. Removendo ou Renomeando um Arquivo ...18

2.2.4. Compilando e Executando um Programa no Dev-C++ ...19

2.2.5. Entendendo o Programa em C++ ...20

2.2.6. A Função main() ...21

2.2.7. Comentários ...22

2.3. Uso de Cout ...22

2.3.1. Entendendo o uso do Objeto cout ...23

2.3.2. Operador << ...23

2.4. Diretivas do Pré-processador ...23

2.4.1. Diretivas do Pré-processador ...23

2.4.2. Diretiva #define ...24

2.5. Uso de Variáveis ...25

2.5.1. Variáveis do Tipo Inteiro ...26

2.5.2. Nomes de Variáveis ...27

2.6. Entrada Usando CIN ...27

2.6.1. Entendendo o Uso do Objeto cin ...27

2.6.2. Operador >> ...27

2.7. Manipuladores ...29

2.7.1. Entendendo Manipuladores ...29

2.7.2. Operador endl ...30

2.7.3. Operador setw ...32

2.8. Tipos de Variáveis (Dados) ...33

2.8.1. Constantes do Tipo Inteiro ...34

2.8.2. Variáveis do Tipo char ...34

2.8.3. Constante do Tipo char...34

2.8.4. Variáveis do Tipo Ponto Flutuante ou Real ...35

2.8.5. Qualificador const ...37

2.8.6. Tipo de Dados long ...37

2.8.7. Definições Múltiplas ...38

2.8.8. Sumário de Tipos de Variáveis ...38

2.8.9. Tipos de Dados unsigned ...40

2.9. Conversão de Tipos ...42

2.9.1. Conversões Automáticas ...43

2.9.2. Casts ...43

2.10. Operadores Aritméticos ...45

(17)

2.10.1. Operadores de Atribuição Aritmética ...46 2.10.2. Operadores de Incremento ...47 2.11. Funções de Biblioteca ...48 Resumo ...50 Questões ...50 Exercícios ...50

Capítulo 3 – laçose deCisões ...53

Objetivos ...53 3.1. Introdução ...54 3.2. Operadores Relacionais ...54 3.2.1. Operadores Relacionais ...55 3.3. Laços ...56 3.3.1. Laço for ...56 3.3.2. Instrução for ...58 3.3.3. Loop while...61 3.3.4. Loop do ...64 3.4. Decisões ...66 3.4.1. if... else...66

3.4.2. Aninhamento (Nesting) de ifs (dentro de laços) ...68

3.4.3. if... else...69

3.4.4. Função getche() ...71

3.4.5. if... else aninhados ...72

3.4.6. else... if ...75

3.4.7. Switch ...76

3.4.8. Operador Condicional ...79

3.5. Operadores Lógicos ...81

3.5.1. Operador Lógico E (AND) ...81

3.5.2. Operador Lógico OU (OR) ...83

3.5.3. Operador Lógico NÃO (NOT) ...84

3.6. Expressões Lógicas ...85

3.7. Precedência de Operadores ...86

3.8. Mais Mecanismos de Controle ...87

3.8.1. Break ...87 3.8.2. Continue ...87 Resumo ...89 Questões ...89 Exercícios ...90 introd_00.indd 17 12/4/2010 10:30:06

(18)

Capítulo 4 – estruturas ...91 Objetivos ...91 4.1. Introdução ...92 4.1.1. Estrutura ...92 4.2. Estruturas Simples ...92 4.1.1. Estrutura ...92 4.3. Especificação de Estrutura ...94 4.3.1. Definição de Estrutura ...94

4.3.2. Definição de uma Variável do Tipo Estrutura ...95

4.4. Acesso a Membros de Estrutura ...95

4.4.1. Acesso a Membros de Estrutura ...95

4.4.2. Definição de Estruturas sem Rótulo (tag) ...95

4.4.3. Inicialização de Membros da Estrutura ...96

4.4.4. Estruturas Dentro de Estruturas ...100

4.4.5. Tipos de Dados Enumerados (Enumerated Data Types)...100

4.4.6. Especificador enum ...102

4.5. Estruturas e Classes ...105

4.5.1. Estruturas ...105

4.5.2. Classes ...105

4.5.3. Diferenças entre Estruturas e Classes ...105

Resumo ...106 Questões ...106 Exercícios ...106 Capítulo 5 – Funções ... 107 Objetivos ...107 5.1. Introdução ...108 5.1.1. Função ...108 5.1.2. Sintaxe de Função ...108

5.2. Passagem de Argumentos em Funções ...111

5.2.1. Passagem de Argumentos ...111

5.3. Retorno de Valores de Funções ...116

5.3.1. Definição de Tipo de Retorno ...118

5.4. Argumentos de Referência...118

5.4.1. Variável de Referência ...118

5.4.2. Passagem de Argumento por Referência ...119

5.4.3. Usando Referência para Retornar Valores ...121

5.5. Funções Sobrecarregadas ...122

5.6. Funções Inline ...124

5.6.1. Problema com Inserção Repetida de Função ...124

5.6.2. Função inline ...125

(19)

5.7. Retorno por Referência ...128

5.7.1. Referência ...128

5.7.2. Função Retornando Referência ...128

5.8. Tópicos Complementares ...129

5.8.1. Argumentos Default ...129

5.8.2. Categorias de Variáveis e Armazenamento (ou Memória) ...132

5.8.3. Variável automatic ...132

5.8.4. Tempo de Vida de Variável ...133

5.8.5. Visibilidade de Variável ...133 5.8.6. Variáveis Locais ...133 5.8.7. Variável External ...134 5.8.8. Variáveis Globais ...134 Resumo ...136 Questões ...136 Exercícios ...137

Capítulo 6 – objetose Classes ... 139

Objetivos ...139

6.1. Introdução ...139

6.1.1. Objetos e Classes ...140

6.1.2. Atributos e Operações em Classes ...140

6.1.3. Mensagens (Funções-membros) ...140

6.1.4. Herança ...140

6.1.5. Polimorfismo ...140

6.1.6. Encapsulamento ...141

6.1.7. Abstração (de Dados) ...141

6.1.8. Exemplificando uma Classe ...141

6.1.9. Ocultação de Dados ...142 6.1.10. Dado private...143 6.1.11. Função public ...143 6.1.12. Função-membro ...143 6.2. Objetos C++ ...144 6.3. Classes e Objetos...146

6.3.1. Classes, Objetos e Memória ...146

6.3.2. Objetos C++ como Tipos de Dados ...147

6.4. Construtores e Destrutores ...149

6.4.1. Construtor ...149

6.4.2. Inicialização com Construtor ...151

6.4.3. Destrutor ...152

(20)

6.5. Objetos como Argumentos e Retorno de Função ...152

6.5.1. Objetos como Argumentos de Função ...152

6.6. Retorno de Objetos de Funções ...156

6.7. Abstração e Encapsulamento ...157

6.7.1. Abstração ...157

6.7.2. Encapsulamento ...157

6.8. Dados de Classe static ...160

6.8.1. Dado-membro static ...160 Resumo ...163 Questões ...163 Exercícios ...163 Capítulo 7 – arrays ...165 Objetivos ...165 7.1. Introdução ...165 7.1.1. Arrays ...165 7.1.2. Definição de Arrays ...166

7.1.3. Diferença entre Arrays e Estruturas...166

7.2. Princípios de Uso de Arrays ...166

7.2.1. Regras para Declaração de Array ...167

7.3. Declaração, Inicialização e Acesso De Arrays ...170

7.3.1. Declaração de Array ...170

7.3.2. Inicialização de Array ...170

7.3.3. Arrays de Múltiplas Dimensões ...172

7.3.4. Formatação de Números Decimais ...174

7.4. Arrays como Dado de Classe ...176

7.4.1. Pilha – Estrutura de Dado ...177

7.4.2. Operação da Pilha ...179

7.5. Arrays de Objetos ...179

7.6. Strings e Arrays ...181

7.6.1. Função cin::get() ...186

7.6.2. Usando get() para Ler Múltiplas Linhas ...187

7.6.3. Função strcpy ...187

7.6.4. Função strlen() ...188

7.6.5. Array de strings ...191

7.6.6. Strings como Membros de Classes ...192

Resumo ...194

Questões ...194

Exercícios ...194

(21)

Capítulo 8 – sobreCargade operadores ... 195

Objetivos ...195

8.1. Introdução ...195

8.1.1. Sobrecarga de Operadores ...196

8.2. Sobrecarga de Operadores Unários...196

8.3. Sobrecarga de Operadores Binários ...205

8.4. Sobrecarga de Operadores Associados a Funções ...213

8.4.1. Sobrecarga do Operador [ ] ...213

8.5. Conversão de Dados ...215

8.6. Funções Friend ...219

8.7. Aplicações e Restrições de Uso ...222

8.7.1. Conversão entre Objetos de Classes Diferentes ...222

Resumo ...225 Questões ...225 Exercícios ...226 Capítulo 9 – Herança ...227 Objetivos ...227 9.1. Introdução ...228 9.1.1. Herança ...228 9.1.2. Classe Derivada ...228 9.1.3. Importância da Herança ...228 9.1.4. Reusabilidade ...228

9.2. Classes Base e Derivada ...228

9.3. Construtores de Classe ...232

9.3.1. Construtores de Classes Derivadas ...232

9.4. Herança em Classe ...235

9.4.1. Ignorando Funções-membros ...235

9.5. Hierarquia e Níveis de Classe ...238

9.5.1. Classe Abstrata ...242

9.6. Herança com public e private ...242

9.6.1. Herança usando public e private ...242

9.6.2. Níveis de Herança ...245

9.7. Herança Múltipla ...249

9.7.1. Ambiguidade em Herança Múltipla ...253

Resumo ...253

Questões ...254

Exercícios ...254

(22)

Capítulo 10 – ponteirose apliCações ...255

Objetivos ...255

10.1. Introdução a Ponteiros ...256

10.1.1. Ponteiros ...256

10.1.2. Entendendo Ponteiros ...256

10.2. Operadores Endereço e Ponteiro ...257

10.2.1. Operador de Endereço ...257

10.3. Operações com Ponteiros ...260

10.4. Objetos Dinâmicos com Ponteiros ...263

10.4.1. Alocação Dinâmica de Memória ...264

10.5. Ponteiros como Argumentos ...268

10.6. Classes Lista, Pilha e Fila...270

10.6.1. Lista ...270 10.6.2. Pilha ...271 10.6.3. Fila ...273 Resumo ...275 Questões ...275 Exercícios ...275

Capítulo 11 – eduCação Continuada ...277

Objetivos ...277 11.1. Retrospecto ...277 11.2. Prospecto ...280 11.3. Aplicações na Engenharia ...282 11.4. Sugestões de Leitura ...283 introd_00.indd 22 12/4/2010 10:30:07

Referências

Documentos relacionados