+ curso de c/c++ aula 7 instrutor: francisco magalhães material por: allan lima
TRANSCRIPT
![Page 1: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/1.jpg)
+
Curso de C/C++
Aula 7
Instrutor: Francisco Magalhães
Material por: Allan Lima
http://allanlima.wordpress.com/
![Page 2: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/2.jpg)
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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/3.jpg)
+Roteiro
O ponteiro this
Membros estáticos
Overload de operadores
Friends
Herança
![Page 4: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/4.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/5.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/6.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/7.jpg)
+Exemplo
exemploStatic.cpp
![Page 8: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/8.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/9.jpg)
+Exemplo
exemploOperador.cpp
![Page 10: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/10.jpg)
+Overload de Operadores
C++ permite a sobrecarga dos seguintes operadores:
Unários: + - * ! ~ & ++ -- () -> ->*
new delete
Binários: + - * / % & | ^ << >>
= += -= /= %= &= |= ^= <<= >>=
= = != < > <= >= && || [] () ,
![Page 11: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/11.jpg)
+Exercícios
1) Crie uma classe Ponto similar a da aula anterior e implemente os seguintes operadores:
==!=+-
![Page 12: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/12.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/13.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/14.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/15.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/16.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/17.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/18.jpg)
+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 destaMas podemos usar casts para ter acesso aos
demais métodos
![Page 19: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/19.jpg)
+Exemplo
exemploHeranca.cpp
![Page 20: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/20.jpg)
+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 mC herda de A e de BO que acontece quando chamamos m de C?
![Page 21: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/21.jpg)
+Exemplo
exemploHerancaMultipla.cpp
![Page 22: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/22.jpg)
+Exercícios
2)Implemente a seguinte hierarquia de classes:
Empregado
Secretaria
GerenteSecretariaTemp
Temporario
Consultor
![Page 23: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/23.jpg)
+Classe Empregado
Atributos:
NomeE-mailCelularSalárioDepartamento
Métodos
gets e setsConstrutor com os seu atributos
![Page 24: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/24.jpg)
+Classe Gerente
Atributos
Os empregados que gerenciaO número empregados que gerencia
Métodos
Gets e setsConstrutor com os seus atributos
![Page 25: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/25.jpg)
+Classe Secretaria
Atributos
O empregado do qual é secretaria Métodos
Gets e setsConstrutor com os seus atributos
![Page 26: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/26.jpg)
+Classe Temporario
Atributos
A data de início do contratoO número de meses do contrato
Métodos
Gets e SetsConstrutor com os seus atributos
![Page 27: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/27.jpg)
+SecretariaTemporaria
Métodos:
Construtor com os seu atributos
![Page 28: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/28.jpg)
+Consultor
Atributos:
Área de consultoria Métodos
Get e setsConstrutor com os seus atributos
![Page 29: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/29.jpg)
+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: + Curso de C/C++ Aula 7 Instrutor: Francisco Magalhães Material por: Allan Lima](https://reader035.vdocuments.net/reader035/viewer/2022070311/552fc142497959413d8df7b7/html5/thumbnails/30.jpg)
+Agradecimentos
Allan Lima e Breno do Vale
Pelo material cedido para o curso