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.
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. }
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
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>.
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.
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 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 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.