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

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

2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.

Apresentações semelhantes


Apresentação em tema: "2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por."— Transcrição da apresentação:

1 2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por cópia Semântica de valor vs. semântica de referência Atribuição por cópia O exemplo das pilhas

2 2002/2003 Programação Orientada para Objectos 2 Classes que reservam recursos externos Princípios usados: 1. Todas as variáveis dinâmicas construídas devem ser destruídas 2. A entidade encarregue de construir deve tipicamente responsabilizar-se pela destruição: política quem constrói, destrói Recursos externos: memória, ficheiros, …

3 2002/2003 Programação Orientada para Objectos 3 Construtor por cópia O que sucede depois de: PilhaDeInt p1; PilhaDeInt p2 = p1; // Ou PilhaDeInt p2(p1); As duas pilhas “partilham orgãos internos”

4 2002/2003 Programação Orientada para Objectos 4 Valor vs. Referência Semântica de valor: Iguais, mas independentes Semântica de referência: Um novo nome para a mesma coisa (identidade) Igualdade ≠ Identidade

5 2002/2003 Programação Orientada para Objectos 5 Construtor por cópia: declaração class PilhaDeInt { public: … /** Constrói pilha igual a original. @pre V. @post *this = original. */ PilhaDeInt(PilhaDeInt const& original); … private: … };

6 2002/2003 Programação Orientada para Objectos 6 Construtor por cópia: definição PilhaDeInt::PilhaDeInt(PilhaDeInt const& original) : capacidade_actual(original.capacidade_actual), itens(new Item[capacidade_actual]), número_de_itens(original.número_de_itens) { assert(original.cumpreInvariante()); for(int i = 0; i != número_de_itens; ++i) itens[i] = original.itens[i]; assert(cumpreInvariante()); // assert(*this == original) se definirmos o operador ==. }

7 2002/2003 Programação Orientada para Objectos 7 Atribuição por cópia O que acontece depois de: PilhaDeInt p1; for(int i = 0; i != 100; ++i) p1.põe(i); PilhaDeInt p2; p2 = p1; Inicialização ≠ Atribuição

8 2002/2003 Programação Orientada para Objectos 8 Atribuição por cópia: declaração class PilhaDeInt { public: … /** Torna *this igual a modelo. @pre V. @post *this = modelo. */ PilhaDeInt& operator = (PilhaDeInt const& modelo); … private: … };

9 2002/2003 Programação Orientada para Objectos 9 Igualdade vs. Identidade Identidade - Alteridade Se duas coisas são a mesma, então são iguais Igualdade - Desigualdade Se duas coisas são diferentes, então são outras Se duas coisas são iguais podem ou não ser a mesma O endereço é que marca a identidade das instâncias

10 2002/2003 Programação Orientada para Objectos 10 Atribuição por cópia: definição PilhaDeInt& PilhaDeInt::operator = (PilhaDeInt const& modelo) { assert(cumpreInvariante() and modelo.cumpreInvariante()); if(this != &modelo) { if(capacidade_actual != modelo.capacidade_actual) { delete[] itens; itens = new Item[modelo.capacidade_actual]; } for(int i = 0; i != modelo.número_de_itens; ++i) itens[i] = modelo.itens[i]; capacidade_actual = modelo.capacidade_actual; número_de_itens = modelo.número_de_itens; } assert(cumpreInvariante()); // assert(*this == modelo) se definirmos o operador ==. }

11 2002/2003 Programação Orientada para Objectos 11 Classes que reservam recursos externos Construção (Construtor por cópia) Destruição (Destrutor) Cópia (Operador de atribuição por cópia) Igualdade ≠ Identidade Semântica de valor vs. semântica de referência


Carregar ppt "2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por."

Apresentações semelhantes


Anúncios Google