Curso de CC Aula 7 Instrutor Francisco Magalhes

  • Slides: 30
Download presentation
+ Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima http:

+ Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima http: //allanlima. wordpress. com/

n Você pode: n n Sob as seguintes condições: n n n copiar, distribuir,

n Você pode: n n Sob as seguintes condições: n n n copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. Veja aqui a licença completa

+ Roteiro n O ponteiro this n Membros estáticos n Overload de operadores n

+ Roteiro n O ponteiro this n Membros estáticos n Overload de operadores n Friends n Herança

+ O ponteiro this n É um atributo que método possui n Ele é

+ O ponteiro this n É um atributo que método possui n Ele é um ponteiro para o objeto no qual um membro esta sendo executado. n No código escrevemos: void Ponto: : set. X(float new. X) { this->x = new. X; }

+ O ponteiro this n Mas assinatura real é: void set. X(Ponto *this, float

+ O ponteiro this n Mas assinatura real é: void set. X(Ponto *this, float new. X) { this->x = new. X; } n E quando chamamos o método: p. set. X(10); n Na verdade estamos fazendo: set. X(&p, 10); n Isso significa que todo método é um função

+ Membros Estáticos n São membros que possuem apenas uma cópia compartilhada por todos

+ Membros Estáticos n São membros que possuem apenas uma cópia compartilhada por todos os objetos de um tipo n Podem ser métodos ou atributos: n Atributos estáticos devem ser definidos dentro da própria classe e inicializados fora dela n Métodos estáticos só podem fazer referência a atributos estáticos.

+ Exemplo n exemplo. Static. cpp

+ Exemplo n exemplo. Static. cpp

+ Overload de Operadores n C++ permite a aplicação de alguns operadores aos tipos

+ Overload de Operadores n C++ permite a aplicação de alguns operadores aos tipos que nós criamos n Alguns operadores como o “=” são criados automaticamente n Porém outros devem ser implementados pelo programador n Sintaxe: n tipo operator símbolo(parâmetros);

+ Exemplo n exemplo. Operador. cpp

+ Exemplo n exemplo. Operador. cpp

+ Overload de Operadores n C++ permite a sobrecarga dos seguintes operadores: Unários: +

+ Overload de Operadores n C++ permite a sobrecarga dos seguintes operadores: Unários: + - new Binários: * ! ~ & ++ -- () -> ->* delete + - * / % & | ^ << >> = += -= /= %= &= |= ^= <<= >>= = = != < > <= >= && || [] () ,

+ Exercícios 1) Crie uma classe Ponto similar a da aula anterior e implemente

+ Exercícios 1) Crie uma classe Ponto similar a da aula anterior e implemente os seguintes operadores: == != + -

+ Friends n Permitem a quebra dos níveis de acesso pelas palavras reservadas private

+ Friends n Permitem a quebra dos níveis de acesso pelas palavras reservadas private e protected n Podemos ter funções, métodos ou classes friends n As declarações são feitas através da palavra reservada friend n Toda classe é friend dela mesma n Exemplo: n exemplo. Friend. cpp

+ Herança class Empregado { string nome; float salario; int num. Departamento; int ramal;

+ Herança class Empregado { string nome; float salario; int num. Departamento; int ramal; //. . . }; class Gerente { string nome; float salario; int num. Departamento; int ramal; Empregado *grupo; //. . . }; Precisamos mesmo repetir todos os atributos da classe Empregado na classe Gerente? E os métodos também precisamos repetir?

+ Herança n É um mecanismo utilizado para permitir o reuso de código n

+ Herança n É um mecanismo utilizado para permitir o reuso de código n Quando uma classe B herda de uma outra classe A dizemos que B é uma sub-classe de A n Em C++ todos os membros public e protected da classe base são herdados n Construtores, Destrutores, o operador = e os friends não são herdados

+ Herança n Sintaxe n class nome. Da. Classe : tipo. Da. Heranca classe.

+ Herança n Sintaxe n class nome. Da. Classe : tipo. Da. Heranca classe. Base n tipo. Da. Heranca: n n public – Os membros public e protected da classe base são por default public e protected respectivamente private – Os membros public e protected da classe base são por default private protected – Os membros public e protected da classe por default são protected Se tipo. Da. Heranca não for especificado, private é assumido para as classes e public para as estruturas

+ Herança n Apesar dos construtores e destrutores não serem herdados, quando criamos um

+ Herança n Apesar dos construtores e destrutores não serem herdados, quando criamos um objeto ele chama o construtor padrão de sua classe base e também o destrutor padrão quando ele está prestes a ser desalocado da memória n Também podemos re-utilizar o código do construtor da classe base: n construtor. Classe(parametros) : construtor. Da. Super. Classe(parametros) {. . . }

+ Herança n A solução: class Empregado { string nome; float salario; int num.

+ Herança n A solução: class Empregado { string nome; float salario; int num. Departamento; int ramal; //. . . }; class Gerente : public Empregado { Empregado *grupo; //. . Dizemos que Gerente herda de Empregado

+ Ponteiros e Herança n Podemos criar ponteiros para classes n A inicialização é

+ Ponteiros e Herança n Podemos criar ponteiros para classes n A inicialização é feita através do operador new ou do & n Quando usarmos o new também temos que usar o delete para liberar memória n Restrições: n Um ponteiro para uma classe base só pode chamar métodos desta n Mas podemos usar casts para ter acesso aos demais métodos

+ Exemplo n exemplo. Heranca. cpp

+ Exemplo n exemplo. Heranca. cpp

+ Herança Múltipla n C++ permite que uma classe herde de várias outras n

+ Herança Múltipla n C++ permite que uma classe herde de várias outras n Sintaxe: class nome. Da. Classe : tipo. Heranca classe. Base 1, //. . . tipo. Heranca classe. Base. N n Mas isso traz problemas: n A e B possuem o método m n C herda de A e de B n O que acontece quando chamamos m de C?

+ Exemplo n exemplo. Heranca. Multipla. cpp

+ Exemplo n exemplo. Heranca. Multipla. cpp

+ Exercícios n 2)Implemente a seguinte hierarquia de classes: Temporario Empregado Secretaria. Temp Consultor

+ Exercícios n 2)Implemente a seguinte hierarquia de classes: Temporario Empregado Secretaria. Temp Consultor Gerente

+ Classe Empregado n Atributos: n Nome n E-mail n Celular n Salário n

+ Classe Empregado n Atributos: n Nome n E-mail n Celular n Salário n Departamento n Métodos n gets e sets n Construtor com os seu atributos

+ Classe Gerente n Atributos n Os empregados que gerencia n O número empregados

+ Classe Gerente n Atributos n Os empregados que gerencia n O número empregados que gerencia n Métodos n Gets e sets n Construtor com os seus atributos

+ Classe Secretaria n Atributos n O empregado do qual é secretaria n Métodos

+ Classe Secretaria n Atributos n O empregado do qual é secretaria n Métodos n Gets e sets n Construtor com os seus atributos

+ Classe Temporario n Atributos n A data de início do contrato n O

+ Classe Temporario n Atributos n A data de início do contrato n O número de meses do contrato n Métodos n Gets e Sets n Construtor com os seus atributos

+ Secretaria. Temporaria n Métodos: n Construtor com os seu atributos

+ Secretaria. Temporaria n Métodos: n Construtor com os seu atributos

+ Consultor n Atributos: n Área de consultoria n Métodos n Get e sets

+ Consultor n Atributos: n Área de consultoria n Métodos n Get e sets n Construtor com os seus atributos

+ Referências n Stroustrup, Bjarne. The C++ Programming Language, Special Edition. n Eckel, Bruce.

+ Referências n Stroustrup, Bjarne. The C++ Programming Language, Special Edition. n Eckel, Bruce. Thinking in C++, 2 nd ed. Volume 1. n Slides de Gustavo (ghpc@cin. ufpe. br)do curso de C/C++

+ Agradecimentos n Allan Lima e Breno do Vale n Pelo material cedido para

+ Agradecimentos n Allan Lima e Breno do Vale n Pelo material cedido para o curso