A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.

Apresentações semelhantes


Apresentação em tema: "PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira."— Transcrição da apresentação:

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?


Carregar ppt "PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira."

Apresentações semelhantes


Anúncios Google