23
3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. [email protected] fla iosil a@comp ter org Estrutura de Dados Prof. Flávio de Oliveira Silva, M.Sc. 115 flaviosilva@computer.org C++ C++ e C - Comparação C Linguagem compilada ANSI C – Padrão e Portabilidade C Programação em Alto nível e baixo nível Programação Estruturada Utilização da memória: Ponteiros C++ Criado por Stroustroup em 1980 Novos conceitos em procedimentos Estrutura de Dados Prof. Flávio de Oliveira Silva, M.Sc. Sobrecarga; Templates; exceções; converões de tipos Conceitos Programação orientada a objetos Classes; Herança; Encapsulamento; Polimorfismo 116

C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. [email protected] fla iosil a@comp ter org

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

1

C++ Orientado a Objetos

Prof. Flávio de Oliveira Silva, [email protected]

fla iosil a@comp ter org

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

115

[email protected]

C++

C++ e C - Comparação C

Linguagem compilada

ANSI C – Padrão e Portabilidade C

Programação em Alto nível e baixo nível

Programação Estruturada

Utilização da memória: Ponteiros

C++ Criado por Stroustroup em 1980

Novos conceitos em procedimentos

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Sobrecarga; Templates; exceções; converões de tipos

Conceitos Programação orientada a objetos Classes; Herança; Encapsulamento; Polimorfismo

116

Page 2: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

2

Utilizando o DevC++ Será utilizado o ambiente DevC+ + (Versão 4.9.9.2)

Ambiente gráfico; Em português; Gratuito

Utiliza compiladores da família gcc

C i d P j t ( Criando um novo Projeto (Arquivo Novo Projeto...)

Um projeto contém todas as informações necessárias para compilar e criar programas.

Em um projeto são armazenados todos os arquivos necessários (arquivos .cpp; .h e .rc)

O projeto (hello.dev) deve ser salvo de preferência em uma pasta específica para o mesmo.

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

117

DevC++ - Novo ProjetoSalvando Arquivos O DevC++ permite a criação de vários tipos de projetos

Um projeto "Console Application" consiste de um programa que será executado no terminal do S.O em modo texto.

Após criar o projeto automaticamente será criada a função main, necessária para a execução do mesmoint main(int argc, char *argv[])

Além disso um arquivo main.cpp será criado.

Neste arquivo existe o código básico de uma "Console Application". Este arquivo deve ser salvo na pasta criada para o projeto.

Para salvar um arquivo:

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

q Utilize a opção do menu Arquivo Salvar (Ctrl + s) ou então a barra de

ferramentas

118

Page 3: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

3

DevC++ - Editando programas O editor de programas possui recursos como:

Navegador de classes

Diferentes cores para diferentes partes do código; complemento de código; entre outrasentre outras.

Cada parte do código possui uma cor específica : Palavras reservadas da linguagem – preto / negrito

Texto (Strings) – vermelho

Números – roxo

Pré-processador - verde

Comentário – azul

P d ã d D C

1 #include <cstdlib>2 #include <iostream>3 //Hello World!4 using namespace std;5 6 int main(int argc, char *argv[])

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Padrão cores do DevC++

119

6 int main(int argc, char argv[])7 {8 int i = 1;9 system("PAUSE");10 return EXIT_SUCCESS;11 }

DevC++ - Compilando Programas Para compilar os programas

Menu Executar Compilar (Ctrl + F9)

Recompilar todas as unidades de código Executar Rebuild All

(Ctrl + F11)

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

120

Page 4: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

4

DevC++ - Configuração Um problema muito comum é o compilador e o linker não encontrar os

arquivos .h e as bibliotecas necessárias

Para Configurar o DevC+ + para utilização do código em C+ +I i i l t d tili d F t O õ d Inicialmente deve ser utilizado o menu: Ferramentas Opções do Compilador

Em seguida deve-se clicar na aba DIRETÓRIOS

Aba BINÁRIOS

C:\Dev-Cpp\Bin

Esta é a pasta que contém os executáveis (compilador; linker; etc.)

Aba BIBLIOTECAS

C \De Cpp\lib

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

C:\Dev-Cpp\lib

Esta é a pasta que contém as bibliotecas que serão utilizadas pelo linker

Aba C++ INCLUDES

Pastas que contém os arquivos .h de bibliotecas fornecidas com o DevC++

121

DevC++ - ConfiguraçãoC++ Includes

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

122

Page 5: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

5

DevC++ - Depuração de ProgramasConfiguração Um recurso importante do compilador é a possibilidade de

depurar (debug) o código.

Para isto inicialmente é necessário informar ao compilador Para isto inicialmente é necessário informar ao compilador que gere informações adicionais que serão utilizadas pelo debugger.

Para configurar deve-se realizar o seguinte procedimento: Projeto Opções do Projeto.

Aba "Geração de Código / Otimização" Selecionar "LINKER" e marcar "YES" em "Gerar informação de

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

çdepuração", conforme mostrado a seguir

Aba "Compilador" Adicionar a opção "-g" para forçar a para produção de informação de

debug

123

DevC++ - Depuração de ProgramasConfiguração Opções do Compilador

Informações para depuração

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

124

Page 6: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

6

Aplicação ConsoleCódigo Básico - C1. //Preprocessador inclui o arquivo stdio.h-definição da função printf

2. #include <stdio.h>

3. // Inclue funções básicas, neste caso a função system

4. #include <stdlib.h>

5. //Definição da função main. Uma aplicação console deve possuir uma

6. // função main

7. int main(int argc, char *argv[])

8. // Inicio do bloco da função main

9. {

10. // Imprime o texto - Hello World! – e duas quebras de linha

11. printf("Hello World!\n\n");

12. //Chama um comando do console do S.O., neste caso o comando PAUSE

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

12. //Chama um comando do console do S.O., neste caso o comando PAUSE

13. system("PAUSE");

14. //Finaliza o processamento da função main e retorna

15. return 0;

16. // fim do bloco da função main

17. }

125

Comandos e Expressões Comando é a menor unidade de um programa C++ e pode conter uma ou mais

linhas

Os comandos são finalizados por ;

Um bloco contém uma sequência de comandos que são executados Um bloco contém uma sequência de comandos que são executados sequencialmente e é iniciado com o caractere { e termina com o caractere }

É possível a criação de blocos dentro de blocos de programa

Uma expressão representa uma operação executada pelo programa. Ex: Definição de Variável; Expressão Aritmética ou lógica; Mensagem entre objetos

1. {

2. expr1;

3. expr2;

{

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

4. {

5. exprI1;

6. exprI;

7. }

8. ...

9. expr3;

10. }126

Page 7: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

7

Tipos Básicos Tipos de dados são abstrações utilizadas e manipuladas por uma linguagem.

Tipos fundamentais fazem parte da linguagem e estão sempre disponíveis para serem utilizados

Quando uma classe é criada um novo tipo fica disponível para o programa Quando uma classe é criada um novo tipo fica disponível para o programa

A tabela abaixo mostras os tipos fundamentais (plataforma 32 bits)

TIPO SINÔNIMO CARACTERÍSTICATAMANHO (Bytes)

VALOR MÍNIMO

VALOR MÁXIMO

bool  booleano  1 0 1char  signed char  caracteres 1 ‐128 127

unsigned char  caracteres sem sinal 1 0 255short  short int; signed short int inteiro pequeno 2 ‐32768 32767

unsigned short  unsigned short int inteiro pequeno sem sinal

2 0 65535

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

127

int signed; signed int inteiros 4 ‐2.147.483.648  2.147.483.648 unsigned int unsigned  inteiro sem sinal  4 0 4.294.967.295 

long  long int; signed long int inteiro grande  4 ‐2.147.483.648  2.147.483.648 unsigned long  unsigned long int inteiro grande sem sinal  4 0 4.294.967.295 

float  ponto flutuante; precisão simples  4 ‐3.40E‐37 3.40E+38double  ponto flutuante; precisão dupla  8 ‐1.70E‐307 1.7e+308 

long double  ponto flutuante; precisão dupla  8 ‐1.70E‐307 1.7e+308 

Declaração Básica de Variáveis Toda variável deve ser declarada sendo necessário a definição do seu

tipo1. int iX;

2 dobule dX dY;2. dobule dX, dY;

3. bool bValue;

Durante a declaração é possível inicializar a variável, definindo um valor inicial para a mesma4. int iX = 200; //Sintaxe C padrão

5. int iX(200), iY(244) //Sintaxe C++

Uma variável declarada dentro um bloco é válida somente dentro daquele bloco. Neste caso ela possui um "escopo LOCAL"

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

p p

Uma variável declarada fora de um bloco possui um "escopo" GLOBAL" A keyword const especifica uma variável cujo valor não pode ser

modificado const double PI = 3.14159;

128

Page 8: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

8

Operadores Aritméticos Símbolos – "+" "-" "* " "/ " "%"

1. int iA = 13; //declara e inicializa

2. int iV(7); //declara e inicializa

3. float f1; //declara a variável

4. f1 = 13; //Inicializa variável

5. iA+iV //retorna 20

6. iA-iV //retorna 6

7. iA*iV //retorna 91

8. iA/iV //retorna 1

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

9. f1/iV //retorna 1.8571428

10. f1%iV //operador módulo – retorna resto inteiro da divisão de f1 por iV neste caso o valor é zero.

129

Operadores Aritméticos INCREMENTO ("++") E DECREMENTO("--")

Funcionam como operadores unários1. int iY, iX = 10 //iY indefinido e iX igual a 10

2. //Incremento prefixado – incrementa primeiro iX e depois Atribui a iY

iY = ++iX;

//Neste ponto iY = 11 e iX = 11;

//Incremento pós-fixado – Primeiro atribui iX a

//iY e depois incrementa iX;

iY iX++

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

3. iY = iX++;

//Ao final iY = 11 e iX = 12;

130

Page 9: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

9

Operadores Lógicos Símbolos – "&&" (AND) "||" (OR) "!" (NOT)

int bX, bY;

bX bY bX && bY bX || bY !bXbX bY bX && bY bX || bY !bXtrue  true  true  true 

false true  false  false  true false  true  false  true 

true false  false  false  false 

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Em C++ se uma expressão é false, o seu retorno equivale a zero de tipo int - int false(0).

Uma expressão é true se retorna um valor diferente de zero

131

Operadores Relacionais Símbolos

OPERAÇÃO SÍMBOLO OPERAÇÃO SÍMBOLOIGUALDADE  ==  MAIOR QUE >

Exemplos:1. int iH = 4, iJ = 4, iK = 6;

2. iH == iJ //Retorna 1

3. iH == iK //Retorna 0

iK iK //R t 1

DESIGUALDADE  !=  MENOR OU IGUAL QUE  <= MENOR QUE  <  MAIOR OU IGUAL QUE  >= 

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

4. iK == iK //Retorna 1

5. iH < iK //Retorna 1

6. iH < iJ //Retorna 0

7. iH <= iJ //Retorna 1

8. iH != iJ //Retorna 0

132

Page 10: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

10

Operadores Binários Símbolos

"AND" BINÁRIO & "OR INCLUSIVO" BINÁRIO |"OR EXCLUSIVO" BINÁRIO ^ COMPLEMENTO BINÁRIO ~

Exemplosint c = 4; //binário 00000100

int d = 6; //binário 00000110

int bytRes;

bytRes = c & d; //retorna 4 00000100

bytRes = c ^ d; //retorna 2 00000010

OR EXCLUSIVO  BINÁRIO COMPLEMENTO BINÁRIO

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

bytRes = c d; //retorna 2 00000010

bytRes = c | d; //retorna 6 00000110

bytRes = ~c; //retorna -5 11111011

bytRes = d >> 2; //retorna 1 00000001

bytRes = d << 2; //retorna 24 00011000

133

Operador Condicional ( ? : ) Exemplo

a ? b : c //retorna o valor b se a é true,

//caso contrário retorna o valor c

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

134

Page 11: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

11

OperadoresUso Associatividade da esquerda para direita

Regras de Precedência[] . e++ e--

-e !e ~e ++e --ee !e e ++e enew* / %+ -== !=&^|&&

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Exemplos:a/b*c interpretado como (a/b)*c

a+b*c/d interpretado como a+((b*c)/d)

135

&&||? :

= += *= /= %= >>= <<= &= ^= !=

Operações Importantes ATRIBUIÇÃO DE VALORES(Operador =)

Variável (v e v1) à esquerda irá conter o valor E, especificado à direita.v = E;

v = v1 = E; equivale a v = (v1 = E); //Evitar!!!

ATRIBUIÇÃO COM OPERADOR (op=) Sendo op um operador

v op= f; equivale a v = v op f;

Exemplo

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

a += 2; equivale a a = a + 2;

136

Page 12: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

12

Operações Importantes Acessar um método de um objeto

Utiliza-se o operador ponto "." ou então o operador "-> "

Exemplos:Circle* pC = new Circle();

//No caso acima pC é um ponteiro para um circle

pC->getName();

Circle c(3); //Neste caso Circle não é um ponteiro,

c.getArea(); //mas sim uma variável estática!

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

137

Estrutura de um Programa em C++# include

# define

Definições de Variáveis globais

Protótipos de funções/classes

Funções criadas pelo programa / Métodos de classes

int main()

{

...

return 0;

}

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

}

138

Page 13: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

13

Arquivos Include A diretiva #include informa que um arquivo de cabeçalho (* .h) deverá

ser incluído, pelo processador, no ponto indicado

Os arquivos de cabeçalho (header files) pode conter protótipos de funções; definições de constantes e definições de classes juntamentefunções; definições de constantes e definições de classes juntamente com seus atributos e métodos

Para incluir um arquivo somente é necessário informar o nome do arquivo sem a necessidade de indicar sua localização

Para que a compilação ocorra corretamente é necessário que as pastas de arquivos INCLUDE esteja corretamente configurada no projeto ou então no ambiente de desenvolvimento.

P fi t d tã i d i l d

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Para configurar as pastas onde estão os arquivos de includes no DEVC++ deve ser utilizado o menu: FERRAMENTAS OPÇÕES DO COMPILADOR DIRETÓRIOS

139

Diretiva #define e Variáveis Globais A diretiva #define é utilizada para dar um nome a um valor

constante que será utilizado em todo o programa.

Após a definição de uma constante através da diretiva Após a definição de uma constante através da diretiva #define, em todas as ocorrências subsequentes no código, após a definição, o nome utilizado, será substituído pela constante no momento da compilação

Com a diretiva #define é possível também criar macros que são utilizados pelo programa

Exemplos:

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Exemplos:#define PI 3.141519

#define maior(x,y)((x>y) ? x : Y)

140

Page 14: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

14

Estruturas de ControleEstrutura de Seleção – if / if-else Uma instrução (ou bloco de instruções) somente será executada caso

uma condição (expressão condicional E) resultar em verdadeiro (true)if (E)

S;S;

Uma variação da estrutura acima é a estrutura if-else. Onde uma escolha é feita.

Se a expressão condicional (E) for verdadeira (true) então um o bloco de instruções logo após a expressão será executado. Caso contrário, sendo a expressão falsa (false) então o bloco que se encontra após a palavra else será executado.if (E)

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

if (E)

S;

else

R;

Um bloco de instruções pode conter uma única linha de código ou então mais de uma linha envolvidos pelos sinais { e }

141

Estruturas de ControleEstrutura de Seleção – if / if-else Exemplo – Bloco com um único comando

if (nota >= 60)

cout << "Aprovado" << endl;

elseelse

cout << "Reprovado" << endl;

Exemplo – Bloco com vários comandosif (ii == 0){

ii = 1;

cout << "Valor de ii atualizado" << endl;

}

else {

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

ii = 0;

cout << "Valor de ii inicializado em zero" << endl;

}

142

Page 15: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

15

Estruturas de ControleSeleção Múltipla – switch A estrutura if-else permite a seleção no máximo entre 2 blocos diferentes.

Caso seja necessário um número maior de opções então deve ser utilizado a estrutura switch. Exemplo:

it h (E) {switch (E) {

case c1 : S1;

break;

case c2 : S2;

break;

...

default : Sd;

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

}

143

Estruturas de ControleSeleção Múltipla – switch Inicialmente a expressão E é avaliada. Caso a expressão E, resulte na

constante c1, o bloco de instruções S1 será executado, até que a palavra break seja encontrada. O break indica que todos as linhas, relacionadas com o switch serão ignoradascom o switch serão ignoradas

Neste caso o próxima instrução após o switch será executada. Da mesma forma caso E, resulte na constante c2 o bloco S2 será executado. E assim, sucessivamente.

Caso a expressão E não resulte em nenhum valor constante presente no switch (c1, c2, ...) então o bloco padrão (default) Sd será executado

O bloco default (Sd) é opcional, não sendo necessário sua presença.

O l t t tili d it h d d ti bt h t

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Os valores constantes utilizados no switch podem ser do tipo btye; short;

144

Page 16: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

16

Estruturas de ControleSeleção Múltipla – switch- Exemploint a = 2;

switch (a){

case 1 : { // este sinal é opcional, porém melhora a leitura do código

cout << "A é igual a 1" << endl;

b k // d bl d fi li d b kbreak; //cada bloco deve sempre ser finalizado com um break

} //caso o bloco tenha sido aberto deve ser fechado

case 2 : {

cout << "A é igual a 2" << endl;

break;

}

case 3 : {

cout << "A é igual a 3" << endl;

break;

}

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

}

default : {

cout << "A é diferente de 1,2 e 3" << endl;

//Neste caso o break é opcional pois não existem outros bloco no switch

}

} // final do comando switch

//continua a execução a partir deste ponto

145

Estruturas de ControleRepetição – while Esta estrutura indica que a instrução ou bloco de instruções (S) que se encontra

logo após uma expressão condicional (E) será executado ENQUANTO tal expressão por verdadeira (true) ou seja diferente de zero.while (E)

S;

Quando a última instrução do bloco é executada a expressão (E) será novamente executada e caso continue verdadeira o bloco será executado mais uma vez, e assim, sucessivamente.

A fim de evitar que a execução do bloco de instruções (S) execute indefinidamente é necessário que dentro deste bloco o valor da expressão condicional seja em algum momento alterado para falso (false).

No caso da instrução while sempre é feito um teste antes da execução do

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

No caso da instrução while, sempre é feito um teste antes da execução do bloco. Dessa forma para que o bloco seja executado, pelo menos uma vez, o resultado da expressão inicialmente seja verdadeiro.

Ao terminar a repetição a primeira instrução após a instrução while é executada.

146

Page 17: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

17

Estruturas de ControleRepetição – while – Exemploint a;

a = 0;

//A instrução abaixo fosse executada não permitiria a repetição

//a = 10//a = 10

while (a < 10) {

cout << "A ainda é menor que 10!" << endl;

//Sem a instrução abaixo a repetição nunca terminaria

a++;

}

//Primeira instrução a ser executada após o while

t << "A é i l 10!" << dl

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

cout << "Agora, a é igual a 10!" << endl;

147

Estruturas de ControleRepetição – do/while Esta estrutura é semelhante ao while, porém sempre o bloco de

instruções (S) será executado pelo menos uma vez.

Em seguida a expressão condicional (E) é avaliada e o bloco de instruções será executado ENQUANTO seu valor for verdadeiroinstruções será executado ENQUANTO seu valor for verdadeiro.do {

S;

} while (E);

Caso a expressão seja verdadeira a primeira instrução do bloco será executada novamente

Da mesma forma que o while, o bloco S deve alterar, em algum t lt d d li ã d ã E fi d

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

momento, o resultado da avaliação da expressão E a fim de que a mesma retorne o valor FALSE

148

Page 18: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

18

Estruturas de ControleRepetição – for Neste caso a repetição é controlada por um contador da

seguinte forma:for (C; E; I)

S;

O bloco de instruções S, será executado enquanto a expressão condicional E, for verdadeira

O contador é inicializado pela expressão C e a expressão I é responsável por alterar o valor do contador

Em algum momento o retorno da expressão E deve ser falso

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Em algum momento o retorno da expressão E deve ser falso e normalmente a expressão utiliza o valor do contador I em uma operação relacional

149

Estruturas de ControleRepetição – for – exemploint i;

for (i = 0; i < 10; i++){

cout << "O contador I ainda é menor que 10!" << endl;

}}

//proxima instrução após o for

No exemplo acima, o contador é um número inteiro i. A instrução será executada enquanto a expressão for verdadeira (i < 10) e i será incrementado de 1 em 1.

Dentro do bloco de instruções pode ser utilizada instrução break que finalizará a repetição desviando o controle para a próxima instrução após a instrução for independente do resultado da expressão E

A instrução continue desvia o controle para o início da instrução for, não

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

executando o restante das instruções do laço, porém realiza o incremento e o teste

A diferença entre continue e break, é que a instrução continue não finaliza a repetição.

break e continue podem ser utilizados também com while e do/while

150

Page 19: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

19

Arrays (Vetores)Declaração O array é uma importante estrutura de dados e que normalmente existe de forma

nativa na maioria da linguagens

Consiste em um grupo de “OBJETOS” do mesmo tipo, onde a cada objeto é associado um “ÍNDICE” único.associado um ÍNDICE único.

Em um array é possível o acesso direto a um objeto utilizando este índice

Estes objetos estão armazenados em uma posição contígua da memória. O número de objetos contidos é definido como sendo o TAMANHO do vetor.

A seguir são mostrados exemplos de sintaxe para a criação de um array em C++//O código abaixo declara um array de 50 posições

int iNotas[50];

//Na declaração abaixo o tamanho é calculado pelo compilador

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

int iPrimos[] = {1, 3, 5, 7, 11};

//Cria um array de objetos da classe Circle

Circle aCircle[10];

151

Arrays (Vetores)Acesso O acesso da cada elemento pode ser feito da seguinte forma:aNotas[0] = 15 //Primeiro elemento

...

aNotas[49] = 34 //Último elemento

Os vetores são estruturas “estáticas”, sendo que uma vez criados não podem ter o seu tamanho alterado. Porém sua criação é feita de forma dinâmica, durante a execução do código.

Para um array de comprimento n, seus índices variam de 0 a n-1.

Um índice equivale a um deslocamento a partir do início do vetor.

Em c+ + é possível deslocar após o final do vetor Isto deve ser sempre

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Em c+ + é possível deslocar após o final do vetor. Isto deve ser sempre evitado!!!

152

Page 20: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

20

Arrays (Vetores)Acesso com Expressões É possível manipular em expressões tanto o índice do vetor, quanto cada

elemento.

Também é possível utilizar variáveis inteiras para variar o índice

Exemplos//Soma de elementos

int iSoma = aNotas[0] + aNotas[3] + aNotas[3+1];

int iPrimeiro, iSegundo, iTerceiro, iResultado ;

iPrimeiro = 0;

iSegundo = 1;

iTerceiro = 2;

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

//adiciona 7 a quarto elemento do vetor (0+1+2=3)

aNotas[iPrimeiro + iSegundo + iTerceiro ] += 7;

iResultado = aNotas[iPrimeiro]/2 + aNotas[3/3]*3

153

Arrays (Vetores)Comprimento do Vetor O comprimento de um vetor pode ser obtido utilizando-se o

operador sizeof.

O operador sizeof retorna o tamanho em bytes do operando O operador sizeof retorna o tamanho em bytes do operandoint iSizeOfInt = sizeof(int);

int iSizeOfCircle = sizeof(Circle);

Para calcular o número de elementos do vetor, basta calcular o tamanho em bytes do vetor e dividir pelo tamanho de um elemento deste vetor da seguinte forma:int iArraySize(0);

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

y ( );

iArraySize =(sizeof aNotas)/(sizeof aNotas[0]);

iArraySize =(sizeof aCircle)/(sizeof aCircle[0]);

154

Page 21: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

21

Arrays (Vetores)Percorrendo os elementos Para percorrer os elementos de um vetor deve ser utilizada alguma

estrutura de repetição A estrutura mais comum para esta atividade é o for, pois é limitado por

um contador que deve ser no máximo igual ao tamanho do vetorum contador que deve ser no máximo igual ao tamanho do vetor

A linguagem C++ permite o acesso fora dos limites do vetor e isto deve sempre ser evitado

Exemploint iArraySize(0);

iArraySize =(sizeof aNotas)/(sizeof aNotas[0]);

for (int ii = 0; ii < iArraySize ; ii++){

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

if (aNotas[ii] >= 60)

cout << “Aprovado" << endl;

else

cout << “Reprovado" << endl;

}

155

Arrays (Vetores)Multidimensionais O vetores podem possui mais de uma dimensão

Neste caso cada elemento do vetor possui mais de um índice associado ao mesmo.índice associado ao mesmo.

Matriz Uma matriz, por exemplo, é um vetor de duas dimensões

Neste caso pode ser dito que a informação está organizada em linhas e colunas.

Exemplo:int aMatriz[2][3];

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Vetor com três dimensões int aCuboInteiros[3][3][3];

156

Page 22: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

22

Arrays (Vetores)Multidimensionais - Elementos A fim de percorrer todos todos os elementos de um vetor

multidimensional é necessário criar variáveis inteiras tantos quantos forem os índices associados ao vetor

Percorrendo os elementos de um vetor bidimensional(matriz) Percorrendo os elementos de um vetor bidimensional(matriz)for (int i = 0; i < iRowSize; i++){

cout << "Percorrendo linha " << i << "da matriz" << endl;

for (int j = 0; j < iColSize; j++){

if (j == 0)

cout << "Percorrendo coluna " << j << endl;

cout<<"M[“<< i << "," << j <<"]"<< aMatriz[i,j] << endl;

}

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

}

157

Arrays (Vetores) Strings Em c++, assim como em C, as sequências de caracteres (Strings) são

tratadas como um vetor de caracteres, ou seja de elementos do tipo char

Inicializando um vetor de caracteresh N [] "Fl i " C [4] "C "char sNome[]="Flavio", sCurso[4]= "C+ + ";

char sLinhaDeTexto[256];

O tamanho do vetor equivale o número de bytes do mesmo, visto que cada elemento do tipo char, possui um byte.

Um vetor de caracteres sempre é finalizado pelo caracter NULL ('\0')

Ao percorrer um vetor de caracteres deve-se encerrar esta operação ao encontrar um caracter NULL POSIÇÃO 

VALOR

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

Esta condição é normalmente utilizada nasestruturas de repetição (while)

158

VETORVALOR

[0] 'C'[1] '+'[2] '+'[3] '\0'[4] '?'

Page 23: C++ Orientado a Objetos - FACOMflavio/ed1/files/2011-01/ED1_C...3/9/2011 1 C++ Orientado a Objetos Prof. Flávio de Oliveira Silva, M.Sc. flavio@facom.ufu.br fla iosil a@comp ter org

3/9/2011

23

Arrays (Vetores) Strings – Percorrendo os elementos Normalmente é utilizando uma estrutura de repetição while

A sequencia é percorrida enquanto um caracter NULL não é encontrado

Exemplo...

char sNome[]="Flavio"

int ii(0);

while (sNome[ii] != '\0'){

cout << sNome[ii] << endl;

ii = ii++;

}

Estrutura de DadosProf. Flávio de Oliveira Silva, M.Sc.

...

159