c++ orientado a objetos - facomflavio/ed1/files/2011-01/ed1_c...3/9/2011 1 c++ orientado a objetos...
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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] '?'
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