1 / 33

Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima http://allanlima.wordpress.com/. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições:

gerry
Download Presentation

Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima http://allanlima.wordpress.com/

  2. Você pode: • copiar, distribuir, exibir e executar a obra • criar obras derivadas • fazer uso comercial da obra • Sob as seguintes condições: • 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

  3. Roteiro • O ponteiro this • Membros estáticos • Overload de operadores • Friends • Herança

  4. O ponteiro this • É um atributo que um método possui • Ele é um ponteiro para o objeto no qual um membro esta sendo executado. • No código, escrevemos: void Ponto::setX(floatnewX) { this->x = newX; } • Na chamada, escrevemos: Ponto p1(42.0,13); p1.setX(42.4);

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

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

  7. Exemplo • exemploStatic.cpp

  8. Exercícios • Implemente uma classe Quadrado com o atributo lado, crie um construtor para ela, assim como os métodos get e set. • Qual a diferença de o corpo do método voidsetLado(float x)ser: { this->lado = lado } ou: { lado = lado; } Justifique (com um comentário no seu código) o que acontece. • Adicione ao construtor um incremento a uma variável estática que conta a quantidade de Quadrados criados. • Crie uma classe Ponto similar a da aula anterior e implemente os seguintes operadores: == != + -

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

  10. Exemplo • exemploOperador.cpp

  11. Overload de Operadores • C++ permite a sobrecarga dos seguintes operadores:

  12. Exercícios • Utilize a classe Ponto do arquivo exemploPonto.cpp (similar a da aula anterior) e implemente os seguintes operadores: == != + -

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

  14. Herança class Empregado { stringnome; float salario; int numDepartamento; int ramal; //... }; classGerente { stringnome; floatsalario; intnumDepartamento; intramal; Empregado *grupo; //... }; Precisamos mesmo repetir todos os atributos da classe Empregado na classe Gerente? E os métodos também precisamos repetir?

  15. Herança • É um mecanismo utilizado para permitir o reuso de código • Quando uma classe B herda de uma outra classe A dizemos que B é uma sub-classe de A • Sintaxe: classNomeDaClasseFilho : publicNomeDaClassePai { //Corpo de Filho }

  16. Herança • A solução: class Empregado { public: stringnome; float salario; int numDepartamento; int ramal; // ... }; class Gerente : public Empregado { Empregado *grupo; //.. }; Dizemos que Gerente herda de Empregado

  17. Herança • Em C++ todos os membros public e protected da classe base são herdados normalmente • Os membrosprivatesão herdados, mas só são acessados indiretamente pelos métodos public ou protected definidos na classe base • Construtores, Destrutores, o operador = e os friendsnão são herdados

  18. Herança • A solução: classRetangulo { private: int altura, largura; protected: intgetAltura(); public: intgetLargura(); // ... }; class Quadrado: publicRetangulo { public: voidmeuMetodo() { this->altura = 5; // errado intx = getAltura(); // ok, mas só no objeto Quadrado inty = getLargura(); // ok também no main } // ... };

  19. Herança • Sintaxe • class nomeDaClasse : tipoDaHeranca classeBase • tipoDaHeranca: • public – Os membros public e protected da classe base são herdados por default public e protected respectivamente • private– Os membros public e protected da classe base são herdados por default private • protected–Os membros public e protected da classe base são herdados por default protected • Se tipoDaHeranca não for especificado,privateé assumido para as classes epublicpara as estruturas

  20. Herança • 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 • Também podemos re-utilizar o código do construtor da classe base: • construtorClasse(parametros) : construtorDaSuperClasse(parametros) { ... }

  21. Ponteiros e Herança • Podemos criar ponteiros para objetos • A inicialização é feita através do operador new ou do & • Quando usarmos o new também temos que usar o delete para liberar memória • Restrições: • Um ponteiro para um objeto da classe base só pode chamar métodos desta • Mas podemos usar casts para ter acesso aos demais métodos (ver linha 143 do próximo exemplo)

  22. Exemplo • exemploHeranca.cpp

  23. Herança Múltipla • C++ permite que uma classe herde de várias outras • Sintaxe: class nomeDaClasse : tipoHeranca classeBase1, // ... tipoHeranca classeBaseN • Mas isso traz problemas: • A e B possuem o método m • C herda de A e de B • O que acontece quando chamamos m de C?

  24. Exemplo • exemploHerancaMultipla.cpp

  25. Exercícios 2) Implemente a seguinte hierarquia de classes: Temporario Empregado Secretaria SecretariaTemp Gerente Consultor

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

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

  28. Classe Secretaria • Atributos • O empregado do qual é secretaria • Métodos • Gets e sets • Construtor com os seus atributos

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

  30. SecretariaTemporaria • Métodos: • Construtor com os seu atributos

  31. Consultor • Atributos: • Área de consultoria • Métodos • Get e sets • Construtor com os seus atributos

  32. Referências • Stroustrup, Bjarne. The C++ Programming Language, Special Edition. • Eckel, Bruce. Thinking in C++, 2nd ed. Volume 1. • Slides de Gustavo (ghpc@cin.ufpe.br)do curso de C/C++ • www.cplusplus.com – Tutorial de Herança

  33. Agradecimentos • Allan Lima, Breno do Vale e Francisco Magalhães • Pelo material cedido para o curso

More Related