300 likes | 399 Views
Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães 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:
E N D
Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães 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: • 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 • O ponteiro this • Membros estáticos • Overload de operadores • Friends • Herança
O ponteiro this • É um atributo que método possui • Ele é um ponteiro para o objeto no qual um membro esta sendo executado. • No código escrevemos: void Ponto::setX(float newX) { this->x = newX; }
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
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.
Exemplo • exemploStatic.cpp
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);
Exemplo • exemploOperador.cpp
Overload de Operadores • C++ permite a sobrecarga dos seguintes operadores:
Exercícios • Crie uma classe Ponto similar a da aula anterior e implemente os seguintes operadores: == != + -
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
Herança class Empregado { stringnome; float salario; int numDepartamento; int ramal; //... }; class Gerente { string nome; float salario; int numDepartamento; 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 • É 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 • Em C++ todos os membros public e protected da classe base são herdados • Construtores, Destrutores, o operador = e os friendsnão são herdados
Herança • Sintaxe • class nomeDaClasse : tipoDaHeranca classeBase • tipoDaHeranca: • 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 tipoDaHeranca não for especificado,privateé assumido para as classes epublicpara as estruturas
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) { ... }
Herança • A solução: class Empregado { stringnome; float salario; int numDepartamento; int ramal; // ... }; class Gerente : public Empregado { Empregado *grupo; //.. }; Dizemos que Gerente herda de Empregado
Ponteiros e Herança • Podemos criar ponteiros para classes • 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 uma classe base só pode chamar métodos desta • Mas podemos usar casts para ter acesso aos demais métodos
Exemplo • exemploHeranca.cpp
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?
Exemplo • exemploHerancaMultipla.cpp
Exercícios • 2)Implemente a seguinte hierarquia de classes: Temporario Empregado Secretaria SecretariaTemp Gerente Consultor
Classe Empregado • Atributos: • Nome • E-mail • Celular • Salário • Departamento • Métodos • gets e sets • Construtor com os seu atributos
Classe Gerente • Atributos • Os empregados que gerencia • O número empregados que gerencia • Métodos • Gets e sets • Construtor com os seus atributos
Classe Secretaria • Atributos • O empregado do qual é secretaria • Métodos • Gets e sets • Construtor com os seus atributos
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
SecretariaTemporaria • Métodos: • Construtor com os seu atributos
Consultor • Atributos: • Área de consultoria • Métodos • Get e sets • Construtor com os seus atributos
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++
Agradecimentos • Allan Lima e Breno do Vale • Pelo material cedido para o curso