programação avançada c++ - ncdd.com.br+/slide11.pdf · slide 11 nielsen castelo damasceno....

73
Programação Avançada C++ Slide 11 Nielsen Castelo Damasceno

Upload: hoangngoc

Post on 13-Feb-2019

222 views

Category:

Documents


1 download

TRANSCRIPT

Programação Avançada C++Slide 11Nielsen Castelo Damasceno

Exercício• Crie um array de objetos chamado ALUNO que

contem os seguintes elementos: código, nome, dia matricula, mês matricula, ano matricula, nome do curso.

• O sistema deve ser capaz de cadastrar os alunos e apresentar a lista de arrays desta estrutura através de uma função.

• Utilize ponteiros e funções

Exercício• Escreva um programa simples que toma um

vetor de preços e um de descontos (10%), e altera o vetor de preços de modo que estes produtos já incluam os descontos no seu valor de venda. O desconto deve ser o mesmo para todos os objetos.

Demostrando o operador de acesso

Demostrando o operador de acesso

Passeio do cavalo (Heurística)1. void tenta(){2. Inicializa seleção de movimentos;3. do{4. seleciona próximo candidato ao movimento;5. if(aceitável){6. registra movimento;7. if(tabuleiro não está cheio){8. tenta(); // tenta novo movimento9. if (não sucessido) apaga registro anterior;10. }11. }12. }while(movimento não sucedido e não acabaram candidatos a

movimento)13. }

Separando a Interface da implementação

Separando a Interface da implementação

Separando a Interface da implementação

Funções de acesso

Funções de acesso

Funções de acesso

Funções de acesso

Destrutores

Destrutores

Destrutores

Ponteiros const e ponteiros para constConst é usada com ponteiros, significando que o ponteiro aponta sempre para o mesmo local de memória, ou que o objeto apontado não muda, ou ambos.

Ponteiro para uma constante: o conteúdo do objeto apontado é constante, mas o ponteiro pode ser apontado para outro objeto.

Ponteiros const e ponteiros para constPonteiro constante: Quando o ponteiro aponta para o mesmo local da memória, o objeto apontado não pode ser alterado.

Uso do this• Os métodos não são criados para cada objeto,

eles ficam armazenado na classe.• Como os métodos são os mesmo para todos os

objetos da classe é necessário um dispositivo para identificação de qual objeto esta acessando o método.

• Este dispositivo é através do objeto this.• Através do ponteiro this o método da classe sabe

qual objeto o esta acessando, ou seja, this é um ponteiro para o objeto que é passado implicitamente para o método.

Uso do this• Você já deve ter se perguntado, como é que um

método da classe acessa o atributo x do objeto1 e não do objeto2 ?

• É que quando um objeto chama um método da classe, este passa para o método o seu endereço através do ponteiro this.

• Desta forma, ao usar um atributo x, na realidade o método esta usando this->x;

• Assim, this é um ponteiro que é passado implicitamente a um método da classe, informando qual objeto a esta acessando.

• this = & objeto; // this contém o endereço do objeto

Uso do this

Uso do this (Classe Time)

Uso do this (Classe Time)

Uso do this (Classe Time)

Uso do this (Classe Time)

Usando auto_ptr• O auto_ptr é uma classe de ponteiro que se

ocorrer uma excessão após a alocação de um conjunto de objetos dinâmicos, os mesmos se auto deletam.

• O auto_ptr automaticamente chama o destrutor do objeto.

• A classe auto_ptr é definida em <memory>.

Usando auto_ptr

Usando auto_ptr

Ponteiro para método e atributos da classe

• Em alguns caso, você pode querer ter um ponteiro para um atributo ou método de uma classe;

Sentença para ponteiros

• Se você desejar acessar um método de um objeto dinâmico, pode usar uma das duas opções:

ptr->função();*ptr->função();

• REFERÊNCIAS (&)Uma referência pode ser encarada como um outro nome para um objeto.Uma referência deve ser definida uma única vez, assim, uma referência aponta sempre para o mesmo local de memória.

Diferença entre ponteiros e referência

• Uma referência não reserva espaço na memória para si próprio.

• O ponteiro reserva espaço para si próprio.• Lembre-se: existe ponteiro para ponteiro, mas não

existe referência de referência.

Referência para ponteiros

• Você pode declarar uma referência para um ponteiro.

• Um outro nome para um ponteiro.

Argumentos pré-definidos• Consiste em atribuir valores iniciais aos parâmetros

de um método.• Assim, quando o método é chamada sem

argumentos, serão usados os argumentos pré-definidos.

Argumentos pré-definidos

STL com Classe

STL com Classe

STL com Classe

Método const• Se um método da classe não altera o estado do

objeto, não altera os atributos do objeto, ele deve ser declarado como const.

• Instruí o compilador de que o método não pode alterar o estado do objeto.

Método const

Método const

Método const

Método estáticos• Existem dois tipos de atributos, os da classe e do objeto.• Se você montar um método que só opera sobre os

atributos estáticos da classe, pode declará-lo como sendo um método estático.

• Um método estático é publico, pode ser acessado sem um objeto da classe, basta colocar o nome da classe o operador de resolução de escopo (::) e o nome do método.

• Você pode passar informações de um objeto para outro através de atributos e métodos estáticos da classe.

Método estáticos

Método estáticos

Método estáticos

Método estáticos

Método inline• Quando você define um método, o compilador reserva

um espaço de memória para o mesmo. Este espaço é ocupado pelo código do método.

• Quando você chama um método com parâmetros, o compilador manda “você” para onde o método esta localizado junto com os parâmetros.

• Depois de executado o método, retorna para o local onde estava. (dois passo: ir até onde o método estar e voltar).

• Portanto, o compilador em vez de passar o endereço do método, coloca uma cópia do mesmo onde ele esta sendo chamado.

Método inline

Herança

Herança

Herança

Herança

Herança

(Polígono)

(Polígono)

(Polígono)

Derivando Polígono

Derivando Polígono

Derivando Polígono

Classe com ponteiro

Classe com ponteiro

Classe com ponteiro

Outro exemplo Classe Animal

Outro exemplo Classe Animal

Outro exemplo Classe Animal

Outro exemplo Classe Animal

Outro exemplo Classe Animal

Outro exemplo Classe Animal

Herança com Classe Pai

Herança com Classe Pai

Herança com Classe Pai

Herança com Classe Pai

Atividade

• Escreva um programa para um sistema de banco.• Um banco possui uma lista de clientes, cada qual

identificado por CPF e nome.• Cada cliente pode ter uma conta corrente.• Cada conta corrente é identificada por um número

e uma agência, e armazena o saldo das transações de débito e crédito.