Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouÁgatha Peixoto Assunção Alterado mais de 7 anos atrás
1
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira
2
Leitura Caps. 18, 19 e 20 “Como programar em C”, 7ma ed., Deitel.
3
Lembrando: Principais diferenças entre Java e C++ O Java não trabalha de forma explícita com ponteiros O Java tem gerenciamento de memória através do Coletor de Lixo O Java não permite sobrecarga de operadores
4
Lembrando: Entrada/Saída Os operadores >> e << foram sobrecarregados para executar operações de entrada e saída. Todo programa, ao ser executado, recebe 4 referências para dispositivos externos cin>>x; cout<<“Nome: ”<<n; cerr<<“Erro nr.”<<nerro<<“\n”;
5
Lembrando: Operador de seleção Operador de seleção de membro ponto (.) É precedido pelo nome de um objeto ou por uma referência a um objeto para acessar os membros do objeto Operador de seleção de membro seta (->) É precedido por um ponteiro de um objeto para acessar os membros daquele objeto
6
Lembrando: Criação de objetos de forma dinâmica Os operadores “new” e “delete”, além de alocar e liberar memória, chamam os construtores e destrutores do objeto O operador “delete” pode ser utilizado uma vez e somente em objetos que foram alocados pelo operador “new” Estes operadores podem ser utilizados em tipos embutidos de dados (int, char,...)
7
Lembrando: Herança Visibilidade dos membros da classe derivada:
8
Lembrando: Métodos ou funções virtuais Uma classe que possua alguma função virtual pura é chamada de abstrata e não se pode declarar objetos desta classe.
9
Referências Uma referência é um nome alternativo para uma variável Declaração de uma referência: TipoDado &Ref = VarReferenciada; DeUso de referências Passagem de parâmetros Retorno de função Retorno como referência a um dado privado Não faça isso! Variáveis comuns
10
Referências void Funcao1(int& i){ // i é inicializado quando //...// Funcao1 for chamada } int &Funcao2( );// Funcao2 retorna uma // referência a um inteiro main() {... // i é inicializado quando // Funcao2 retornar int &i = Funcao2( ); }
11
Referências: Passagem de Parâmetros void Valor(int i){ i = i * 2;} void Ponteiro(int *i){ *i = *i * 2;} void Referencia(int &i){ i = i * 2 ;} main( ) { int x=5; Valor(x); cout << x ;// mostra Ponteiro(&x); cout << x ;// mostra Referencia(x); cout << x ;// mostra }
12
Referências: Passagem de Parâmetros void Valor(int i){ i = i * 2;} void Ponteiro(int *i){ *i = *i * 2;} void Referencia(int &i){ i = i * 2 ;} main( ) { int x=5; Valor(x); cout << x ;// mostra 5 Ponteiro(&x); cout << x ;// mostra Referencia(x); cout << x ;// mostra }
13
Referências: Passagem de Parâmetros void Valor(int i){ i = i * 2;} void Ponteiro(int *i){ *i = *i * 2;} void Referencia(int &i){ i = i * 2 ;} main( ) { int x=5; Valor(x); cout << x ;// mostra 5 Ponteiro(&x); cout << x ;// mostra 10 Referencia(x); cout << x ;// mostra }
14
Referências: Passagem de Parâmetros void Valor(int i){ i = i * 2;} void Ponteiro(int *i){ *i = *i * 2;} void Referencia(int &i){ i = i * 2 ;} main( ) { int x=5; Valor(x); cout << x ;// mostra 5 Ponteiro(&x); cout << x ;// mostra 10 Referencia(x); cout << x ;// mostra 20 }
15
Sobrecarga de operadores C++ não permite a criação de novos operadores mas ela permite que a maioria dos operadores seja sobrecarregada Isto, de modo que, quando forem usados com objetos, eles tenha um significado apropriado para esses objetos
16
Sobrecarga de operadores Operadores que podem ser sobrecarregados
17
Sobrecarga de operadores Operadores que não podem ser sobrecarregados . .* :: ?:
18
Sobrecarga de operadores A sobrecarga de um operador de atribuição e de um operador de acréscimo para permitir instruções como: objeto2 = objeto2 + objeto1 ; Não implica que o operador += também deva ser sobrecarregado para permitir: objeto2 += objeto1;
19
Modificadores para membros Os modificadores afetam na forma como tratar alguma função (ou algum atributo) Modificadores podem ser: inline const static
20
Funções inline inline é usado para repetir o código de uma função ao invés de chamá-la O código da função é executado de forma mais rápida pois não há chama da função Mas como código é repetido cada vez que a função é usada acrescentando tamanho ao programa Compiladores modernos podem decidir sozinhos quais funções devem ser inlined
21
Funções inline class Exemplo { public: Exemplo(int); private: int A; }; inline Exemplo::Exemplo(int a) { A= a;} Neste caso o construtor é definido como inline dentro da própria declaração
22
Objetos const (constantes) const é usado para especificar que um objeto não é modificável Declarando um objeto const “dia” da classe Time: const Time dia(12, 0, 0); C++ não permite chamadas de função-membro para objetos const A menos que as próprias funções-membro também sejam declaradas como const
23
Objetos const (constantes) Torna o elemento ao qual foi aplicado disponível apenas para leitura (readonly) Pode ser aplicado em Variáveis const int i = 10; // i é readonly
24
Objetos const (constantes) Ponteiros Complicado int const *ptr1; // ponteiro constante const int *ptr2; // ponteiro para um // dado constante int *vetor; *ptr1 = 5; // OK ptr1 = vetor; // Erro *ptr2 = 10; // Erro ptr2 = vetor; // OK
25
Objetos const (constantes) Parâmetros de funções int Calcular(const int *Vetor){ for(int i=0;i<10;i++) Vetor[i] ++; // Erro } Objetos de uma classe Se um objeto for declarado como const, somente podem ser chamadas as funções membros que também forem
26
Funções const const Deve-se procurar declarar todas as funções que não modifiquem os dados da classe como const. Funções membros Se uma função membro for declarada const ela só poderá chamar outra função que também seja const.
27
Funções const class Data { int Dia, Mes, Ano; public: Data( int D, int M, int A){... } void SetDia( int NovoDia ){ Dia = NovoDia;} // função membro constante const int GetDia( ){ return Dia;} }; int main() { const Data Aniversario(30, 05, 63); cout << Aniversario.GetDia( ); // OK Aniversario.SetDia(20); // Erro }
28
Funções const class G {... int MudaValor() {... } const Mostra() // Função membro const { MudaValor(); // Erro! Esta função não // é constante... } };
29
Membros da classe static Em certos casos, somente uma cópia de uma variável deve ser compartilhada por todos os objetos de uma classe Um dado-membro static é usado para esses e outros motivos Essa variável representa a informação “em escopo de classe” Mesmo comportamento que static em Java
30
Membros da classe static class Employee { public: Employee(const string &, const string &); ~Employee(); string getFirstName() const; string getLastName() const; static int getCount(); private: string firstName; string lastName; static int employeeCount; };
31
Polimorfismo O polimorfismo permite uma “programação geral” em vez de uma “programação específica” O polimorfismo permite escrever programas que processam objetos de classes que fazem parte da mesma hierarquia de classe Em Java haviam polimorfismo usando classes e interfaces C++ só tem usando classes
32
Polimorfismo class Pessoa{ public: Pessoa(char *n) { strcpy(nome,n); } void imprimeNome() { cout<<nome<<endl; } protected: char nome[30]; }; class Aluno:public Pessoa{ public: Aluno(char *n):Pessoa(n){} void imprimeNome() { cout<<”Aluno: ” <<nome<<endl; } }; class Empregado:public Pessoa{ public: Empregado(char *n):Pessoa(n){} void imprimeNome() { cout<<"Empregado: ” <<nome<<endl; } }; int main(){ Pessoa *p1= new Aluno("Luiz"); Pessoa *p2= new Empregado("Ana"); p1->imprimeNome(); p2->imprimeNome(); delete p1; delete p2; return 0; }
33
Polimorfismo class Pessoa{ public: Pessoa(char *n) { strcpy(nome,n); } void imprimeNome() { cout<<nome<<endl; } protected: char nome[30]; }; class Aluno:public Pessoa{ public: Aluno(char *n):Pessoa(n){} void imprimeNome() { cout<<”Aluno: ” <<nome<<endl; } }; class Empregado:public Pessoa{ public: Empregado(char *n):Pessoa(n){} void imprimeNome() { cout<<"Empregado: ” <<nome<<endl; } }; int main(){ Pessoa *p1= new Aluno("Luiz"); Pessoa *p2= new Empregado("Ana"); p1->imprimeNome(); p2->imprimeNome(); delete p1; delete p2; return 0; } super()
34
Polimorfismo class Pessoa{ public: Pessoa(char *n) { strcpy(nome,n); } void imprimeNome() { cout<<nome<<endl; } protected: char nome[30]; }; class Aluno:public Pessoa{ public: Aluno(char *n):Pessoa(n){} void imprimeNome() { cout<<”Aluno: ” <<nome<<endl; } }; class Empregado:public Pessoa{ public: Empregado(char *n):Pessoa(n){} void imprimeNome() { cout<<"Empregado: ” <<nome<<endl; } }; int main(){ Pessoa *p1= new Aluno("Luiz"); Pessoa *p2= new Empregado("Ana"); p1->imprimeNome(); p2->imprimeNome(); delete p1; delete p2; return 0; }
35
Polimorfismo class Pessoa{ public: Pessoa(char *n) { strcpy(nome,n); } virtual void imprimeNome() { cout<<nome<<endl; } protected: char nome[30]; }; class Aluno:public Pessoa{ public: Aluno(char *n):Pessoa(n){} void imprimeNome() { cout<<”Aluno: ” <<nome<<endl; } }; class Empregado:public Pessoa{ public: Empregado(char *n):Pessoa(n){} void imprimeNome() { cout<<"Empregado: ” <<nome<<endl; } }; int main(){ Pessoa *p1= new Aluno("Luiz"); Pessoa *p2= new Empregado("Ana"); p1->imprimeNome(); p2->imprimeNome(); delete p1; delete p2; return 0; }
36
Funções friend: Misturando C e C++ class matrix: // referência posterior ! class vect { int *p; int size; friend vect mpy (vect &v, matrix &m); // friend permite //acessar membros privados public: }; class matrix { int **p; int s1; int s2; friend vect mpy (vect &v, matrix &m); // friend permite // acessar membros privados public: }; vect mpy (vect& v, matrix& m) { if ( v.size != m.s1) { cerr << “erro !” ; exit(1) ; } vect ans(m.s2);... }
37
Perguntas?
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.