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

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

Técnicas de Programação

Apresentações semelhantes


Apresentação em tema: "Técnicas de Programação"— Transcrição da apresentação:

1 Técnicas de Programação
Construtores e Destrutores em C++ Prof.: José Eustáquio Rangel de Queiroz Carga Horária: 60 horas

2 Construtores I Funções-membros responsáveis pela inicialização de uma classe Características Mesmo nome da classe Sem tipo de retorno class Retangulo{ float base, altura; // ... Outros atributos public: Retangulo(float, float); // Construtor // ... Outras funcoes-membros };

3 Construtores II Chamada automática sempre que nova instância de uma classe for criada Necessidade de fornecimento de parâmetros ao construtor quando se deseja configurar a nova instância criada class Horario{ float hora, minuto, segundo; // ... Outros atributos public: Horario(int, int, int); // Construtor // ... Outras funcoes-membros };

4 Construtores III Chamada automática sempre que nova instância de uma classe for criada Geração de um construtor default pelo compilador, caso nenhum construtor seja declarado Sem parâmetros Corpo vazio

5 Construtores IV Tipos Default (ou Gerado pelo compilador)
Não aceita parâmetros Inicializa implicitamente instâncias da classe Parametrizado (ou Regular) Aceita parâmetros Inicializa explicitamente instâncias da classe

6 Construtores V Inicialização de variáveis simples int hora = 8;
float t = 32.8; double x = sqrt(3.9); char* apont = NULL; char dsc[] = “TECNICAS DE PROGRAMACAO”; double coef[4] = {0.01, 0.03, 0.05, 0.75};

7 Construtores VI Inicialização de objetos I Classes I
Tipos complexos (derivados) Possibilidade de inclusão de vários componentes Exemplo 01: Classe Motor ID, Vnom, Inom, nfases, rpm, etc. Exemplo 02: Classe Monitor nome, mat, cpf, disc, orientador, etc.

8 Construtores VII Inicialização de objetos II Classes II
Declaração associada à construção de um objeto  Reserva de blocos de memória necessários para o armazenamento da variável

9 Construtores VIII Inicialização de objetos III Classes III Exemplo 01
rpm nfases Membro Offset 2 10 26 18 Inom Vnom ID 22 Membros da class class Motor { short int ID; // Identificador double Vnom; // Voltagem nominal double Inom; // Corrente nominal int nfases; // # de fases float rpm; // Velocidade rotacional public: // Funcoes-membros }; // class Motor

10 Construtores IX Inicialização de objetos IV
Inadequação de construtores default I Falta de sentido na inicialização não parametrizada de classes Exemplo 03 class ContaBancaria{ // Corpo da class }; int main(){ ContaBancaria cb1; // conta sem cliente // Corpo da main() }; Inicialização sem sentido

11 Construtores X Inicialização de objetos V
Inadequação de construtores default II Solução  Declaração de um construtor default private Exemplo 03 class ContaBancaria{ ContaBancaria(); // Construtor default privado }; int main(){ ContaBancaria cb1; // NAO compila // Corpo da main() };

12 Construtores XI Inicialização de objetos VI
Necessidade de construtores default I Criação de arrays de objetos Alocação de espaço contíguo na memória para todos os objetos Chamada do construtor em cada objeto

13 Construtores XII Inicialização de objetos VII
Necessidade de construtores default II Criação de arrays de objetos Exemplo 04 Aluno turma01[60]; // Falha se nao houver um construtor // default apropriado disponivel Data feriados[30]; // Idem IMPORTANTE!!! Quando não há um construtor default, C++ falha na construção de arrays de objetos da classe se for empregada pura e simplemente a sintaxe dos colchetes.

14 Construtores XIII Inicialização de objetos VIII
Necessidade de construtores default III Criação de arrays de objetos Solução (não única!) Declaração de um apontador para um array de objetos Alocação e inicialização de cada objeto em um laço Exemplo 05 Aluno turma01[60]; // Falha se nao houver um construtor // default apropriado disponivel Data feriados[30]; // Idem

15 Construtores XIV Inicialização de objetos IX
Necessidade de construtores default IV Criação de arrays de objetos Solução (não única!) Declaração de um apontador para um array de objetos Alocação e inicialização de cada objeto em um laço Exemplo 06 Data* aulatp[60]; for (int dia = 0; dia < 31; ++ dia){ aulatp[i] = new Data(dia, 5, 2017); }

16 Construtores XV Inicialização de objetos X
Necessidade de construtores default V Criação de arrays de objetos Solução (não única!) Emprego de um conjunto de listas de inicializadores par os objetos do array Exemplo 07 Cubos* caixinhas[5]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}, {16, 17, 18} };

17 Construtores XVI Construtores Múltiplos
Criação de objetos com formatos diferentes Exemplo 08 Data hoje; Data hoje(29, 11, 2016); Data hoje(“29, Nov., 2016”);

18 Construtores XVII Sobrecarga de Construtores I
Múltiplas formas de inicializar objetos a partir de todos os atributos parte dos atributos outro objeto ... Diferentes assinaturas Tipos Quantidade de argumentos

19 Construtores XVIII Sobrecarga de Construtores II Exemplo 09
Data hoje; // construtor default Data prova_escrita(09, 05, 2017); // especificacao // explicita do mês, dia e ano Data recesso(“05, Set., 2017”); // inicializacao // a partir de uma string de caracteres Data Ferias(recesso); // inicializacao a partir // de outro objeto

20 Construtores XIX Tarefas típicas de construtores sobrecarregados
Verificação de argumentos Incremento do número de instâncias Chamada de funções-membros privadas para verificação da entrada e atribuição de valores a membros privados de dados Exemplo 10 Exemplo 12 Ver também Exemplo 11

21 Construtores XXI Atribuição de valores aos membros de dados
Direta  Via construtor(es) da classe Indireta  Via função privada

22 Construtores XXII Atribuição x Inicialização I
Atribuição  Corpo do construtor Inicialização  Lista de inicialização Horario :: Horario(unsigned h, unsigned m, unsigned s){ hora = h; minuto = m; segundo = s; } Horario :: Horario(unsigned h, unsigned m, unsigned s): hora(h), minuto(m), segundo(s){}; Lista de inicialização Corpo vazio

23 Construtores XXIII Atribuição x Inicialização II Implicações I
Atribuição I h, m e s exigem a criação de um objeto temporário separado, do qual repassa os resultados da avaliação, via operador de atribuição, para as variáveis membros hora, minuto e segundo Em seguida, o objeto temporário é destruído Forma ineficiente

24 Construtores XXIV Atribuição x Inicialização III Implicações II
Atribuição II Construção total do objeto a partir de seu construtor default Alocação extra de memória (ou) Abertura de arquivo default Forma ineficiente

25 Construtores XXV Atribuição x Inicialização III Implicações III
Benefício mais comum  Melhoramento do desempenho Se h, m e s forem respectivamente dos mesmos tipos das variáveis membros hora, minuto e segundo  Resultados da avaliação construídos diretamente em hora, minuto e segundo Mesmo quando os tipos não são os mesmos, o compilador usualmente realiza melhor a tarefa com listas de inicialização

26 Construtores XXVI Atribuição x Inicialização IV Recomendações
Empregar inicialização Evitar alocação, desalocação, realocação pelo nome IMPORTANTE!!! Mesmo que os resultados finais sejam iguais, o código será executado mais rapidamente se forem empregadas listas de inicialização ao invés de atribuição.

27 Construtores XXVII Possibilidade de problema com a inicialização
Ordem de inicialização Ordem na qual as variáveis membros foram declaradas Atentar para a ordem na qual os membros se encontram na lista de inicialização!!! Dependências sutis podem causar problemas

28 Construtores XXVIII rep dependente de tam !!!
Exemplo 13 – “Gargalo″ em uma lista de inicialização Inicialização de tam após rep rep dependente de tam !!! class Frase{ private: char* rep; unsigned tam; public: Frase(const char* a) : tam(strlen(a)), rep(new char[tam + 1]){};}

29 Construtores XXIX Construtor de Cópia I
Criação de objetos cuja inicialização é feita a partir de um objeto da mesma classe previamente criado Sintaxe nome_da_classe(const nome_da_classe &objeto){ // corpo de construtor }

30 Construtores XXX Construtor de Cópia II Emprego
Inicialização de objetos a partir de outro do mesmo tipo Passagem de um objeto por valor Retorno de um objeto por valor

31 Construtores XXXI Construtor de Cópia III Exemplo 14 Exemplo 15
Data::Data(const Data& hoje){ dia = hoje.dia; mes = hoje.mes; ano = hoje.ano; } Linha::Linha(const Linha& linsol){ apont = new int; *apont = *linsol.apont; // copia o valor }

32 Construtores XXXII Construtor de Cópia IV Exemplo 16
Data prova_escrita(09, 06, 2017); Data outra(prova_escrita); // passagem por valor Data qualquer = prova_escrita; // retorno por valor Data quem_sabe = new Data(prova_escrita); // inicializacao dinamica de quem_sabe a partir // de prova_escrita

33 Construtores XXXIII Construtor de Cópia V Cuidados
Evitar o emprego desnecessário Preferir a passagem por refêrencia à passagem por valor unsigned diferente(const Data& prova_escrita);

34 Construtores XXXIV Construtor de Cópia implícito I
Cópia bit-a-bit dos membros Adequação para tipos built-in (primitivos) Inadequação para recursos inerentes aos objetos Reprodução do problema do “recheio” de Bytes (Slack Bytes) típico das structs

35 Construtores XXXV Construtor de Cópia implícito II Exemplo 17
d:7 m:12 y:2016 apr* hoje class Data{ char* apr; // atributo de Data . } Data hoje; Data mais_tarde(hoje); 7/12/2016 d:7 m:12 y:2016 apr* mais_tarde

36 Construtores XXXVI Construtor de Cópia implícito III
Problema  Cópia superficial por definição Construtor de cópia provido pelo compilador é um construtor de cópia superficial (shallow copy) hoje e mais_tarde  Apontadores para o mesmo bloco da memória Qualquer alteração de uma data afetará a outra

37 Destrutores I Funções-membros automaticamente invocadas para a liberação do espaço ocupado por objetos locais, quando estes saem do escopo de programação Invocação implícita quando objetos dinâmicos são desalocados com delete Características Mesmo nome da classe, precedido por um ~ Sem tipo de retorno

38 José Eustáquio Rangel de Queiroz
DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA


Carregar ppt "Técnicas de Programação"

Apresentações semelhantes


Anúncios Google