centro integrado de tecnologia da informação curso de c/c++ aula 7 allan lima

30
Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima http://allanlima.wordpress.com/

Upload: internet

Post on 17-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Centro Integrado de Tecnologia da Informação

Curso de C/C++Aula 7

Allan Limahttp://allanlima.wordpress.com/

Page 2: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

• 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

Page 3: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Roteiro

• O ponteiro this

• Membros estáticos

• Overload de operadores

• Friends

• Herança

Page 4: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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;

}

Page 5: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 6: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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.

Page 7: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exemplo

• exemploStatic.cpp

Page 8: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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);

Page 9: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exemplo

• exemploOperador.cpp

Page 10: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Overload de Operadores

• C++ permite a sobrecarga dos seguintes operadores:

Unários: + - * ! ~ & ++ -- () -> ->*

new delete

Binários: + - * / % & | ^ << >>

= += -= /= %= &= |= ^= <<= >>=

= = != < > <= >= && || [] () ,

Page 11: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exercícios

1) Crie uma classe Ponto similar a da aula anterior e implemente os seguintes operadores:

==

!=

+

-

Page 12: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 13: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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?

Page 14: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 15: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 16: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 17: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 18: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 19: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exemplo

• exemploHeranca.cpp

Page 20: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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?

Page 21: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exemplo

• exemploHerancaMultipla.cpp

Page 22: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Exercícios

• 2)Implemente a seguinte hierarquia de classes:

Empregado

Secretaria

GerenteSecretariaTemp

Temporario

Consultor

Page 23: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Classe Empregado

• Atributos:– Nome– E-mail– Celular– Salário– Departamento

• Métodos– gets e sets– Construtor com os seu atributos

Page 24: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Classe Gerente

• Atributos– Os empregados que gerencia– O número empregados que gerencia

• Métodos– Gets e sets– Construtor com os seus atributos

Page 25: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Classe Secretaria

• Atributos– O empregado do qual é secretaria

• Métodos– Gets e sets– Construtor com os seus atributos

Page 26: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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

Page 27: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

SecretariaTemporaria

• Métodos:– Construtor com os seu atributos

Page 28: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Consultor

• Atributos:– Área de consultoria

• Métodos– Get e sets– Construtor com os seus atributos

Page 29: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

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++

Page 30: Centro Integrado de Tecnologia da Informação Curso de C/C++ Aula 7 Allan Lima

Agradecimentos

• Gustavo Henrique Porto – Pelo material cedido para montagem da aula