centro integrado de tecnologia da informação curso de c/c++ aula 7 allan lima
TRANSCRIPT
Centro Integrado de Tecnologia da Informação
Curso de C/C++Aula 7
Allan Limahttp://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:
Unários: + - * ! ~ & ++ -- () -> ->*
new delete
Binários: + - * / % & | ^ << >>
= += -= /= %= &= |= ^= <<= >>=
= = != < > <= >= && || [] () ,
Exercícios
1) 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 {
string nome;
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 friends nã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 e public para 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 { string nome; 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:
Empregado
Secretaria
GerenteSecretariaTemp
Temporario
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 ([email protected])do curso de C/C++
Agradecimentos
• Gustavo Henrique Porto – Pelo material cedido para montagem da aula