Cap - PowerPoint PPT Presentation

1 / 38
About This Presentation
Title:

Cap

Description:

Cap tulo 4 Objetivos de Estudo Par metros Chamados por valor Chamados por refer ncia Lista de par metros mistos Sobrecarga e Argumentos-Padr o Exemplos e Regras ... – PowerPoint PPT presentation

Number of Views:56
Avg rating:3.0/5.0
Slides: 39
Provided by: FredC154
Category:
Tags: cap | liga

less

Transcript and Presenter's Notes

Title: Cap


1
(No Transcript)
2
Capítulo 4
Parâmetros e Sobrecarga
Created por Frederick H. Colclough, Colorado
Technical University
3
Objetivos de Estudo
  • Parâmetros
  • Chamados por valor
  • Chamados por referência
  • Lista de parâmetros mistos
  • Sobrecarga e Argumentos-Padrão
  • Exemplos e Regras
  • Testando e Depurando Funções
  • Macro assert
  • Stubs e Drivers

4
Parâmetros
  • Dois métodos de passar argumentos comoparâmetros
  • Chamados por valor
  • Uma cópia do valor é passada
  • Chamados por referência
  • O endereço do argumento atual é passado

5
Parâmetros Chamados por Valor
  • Cópia do argumento atual é passada
  • Considerado variável local dentro da função
  • Se modificado, somente a cópia local muda
  • A função não tem acesso ao argumento atualde
    quem chamou
  • Este é o método padrão
  • Usado em todos os exemplos até aqui

6
Exemplo de Chamados por Valor
Painel 4.1 página 92
7
Exemplo de Chamados por Valor (Cont)
Painel 4.1 página 92
8
Chamados por Valor Armadilha
  • Erro comum
  • Declarar o parâmetro novamente dentro da
    funçãodouble fee(int hoursWorked, int
    minutesWorked) int quarterHours // variável
    local int minutesWorked // NÃO!
  • Compilador apresenta um erro
  • Redefinition error
  • Chamados por valor SÃO como variáveis locais
  • Mas a função recebe-os automaticamente

9
Parâmetros Chamados por Referência
  • Usados para fornecer acesso ao argumento
  • atual de quem chamou
  • A variáveis da função que chamou podem
  • ser modicadas pela função chamada!
  • Tipicamente usado por Funções de entrada
  • Para recuperar dados para a função que chamou
  • O dado é então entregue à função que chamou
  • Assinalado pelo e comercial ao finaldo
    nome do tipo

10
Exemplo de Chamados por Referência
Painel 4.2 página 94
11
Exemplo de Chamados por Referência (Cont)
Painel 4.2 página 94
12
Chamados por Referência em detalhes
  • O que relamente é passado?
  • Uma referência volta para o argumento atual
  • da função que chamou !
  • Refere-se ao local na memória do argumento atual
  • Chamado endereço, o qual é um número
  • único referente a um local distinto na memória

13
Parâmetros de Referência Constantes
  • Argumentos por referência são de
    naturezaperigosa
  • Dados da função que chamou podem ser mudados
  • Com freqüência isso é desejado, algumas vezes não
  • Para proteger os dados, e ainda passar por
    referência
  • Utilize a palavra-chave const
  • void sendConstRef( const int par1, const
    int par2)
  • Faça argumentos somente-leitura por função
  • Nunhuma mudança é permitida dentro do corpo
  • da função

14
Parâmetros e Argumentos
  • Os termos geralmante usados podem
  • causar confusão
  • Significado verdadeiro
  • Parâmetros formais
  • Em uma declaração de função e definição de função
  • Argumentos
  • Usados para preencher um parâmetro formal
  • Na chamada de função (Lista de argumentos)
  • Chamados por valor e Chamados por referência
  • Simplesmente o mecanismo usado no processo

15
Lista de parâmetros mistos
  • Pode combinar mecanismos de passagem
  • A lista de parâmentros pode incluir passa-gem
    por valor e por referência
  • A ordem dos argumentos na lista é críticavoid
    mixedCall(int par1, int par2, double par3)
  • Chamada de FunçãomixedCall(arg1, arg2, arg3)
  • arg1 precisa ser do tipo integer, é passado por
    referência
  • arg2 precisa ser do tipo integer, é passado por
    valor
  • arg3 precisa ser do tipo double, é passado por
    referência

16
Escolhendo Nomes de Parêmetros Formais
  • As mesmas regras para nomear qualquer
    indentificador
  • Nomes significativos!
  • Funções como módulos independentes
  • Escritas separadamente do resto do programa
  • Atribuídas à equipes de programadores
  • Todos devem entender o uso adequado da função
  • OK se nomes de parêmetros formais são os
  • mesmos que os nomes de argumentos
  • Escolha nomes de função com as mesmas regras

17
Sobrecarga
  • Mesmo nome de função
  • Lista diferente de parâmetros
  • Duas definições de função separadas
  • Assinatura de Função
  • Nome da função e lista de parâmetros
  • Pecisa ser único para cada definição de função
  • Permite que a mesma tarefa seja executada
  • com dados diferentes

18
Exemplo de Sobrecarga Média
  • Função calcula a média de 2 númerosdouble
    average(double n1, double n2) return ((n1
    n2) / 2.0)
  • Agora calcula a média de 3 númerosdouble
    average(double n1, double n2, double
    n3) return ((n1 n2) / 2.0)
  • Mesmo nome, duas funções

19
médiaSobrecarregada( ) (cont)
  • Qual função foi chamada?
  • Depende da chamada de função
  • avg average(5.2, 6.7)
  • Chama média de dois parâmetros()
  • avg average(6.5, 8.5, 4.2)
  • Chama média de três parâmetros()
  • O compilador decide sobre a chamada baseado
  • na assinatura na função
  • Identifica a chamada com a função apropriada
  • Cada uma é considerada um função separada

20
Sobrecarga Armadilha
  • Somente sobrecarregue funções que executem
  • a mesma tarefa
  • Uma função mpg() deve sempe executar aa mesma
    tarefa, em todas as sobrecargas
  • De outro modo, os resultados são imprevisíveis
  • Solução de chamada de função em C
  • 1o Olhe para a assinatura exata
  • 2o Olhe para a assinatura compatível

21
Solução de Sobrecarga
  • 1o Identidade Perfeita
  • Olhe para a assinatura exata
  • Onde nenhuma conversão de argumento é requerida
  • 2o Identidade compatível
  • Olhe para a assinatura compatível, ondeÉ
    possível a conversão automática de tipos
  • 1o com promoção (ex. int?double)
  • Nenhuma perda dos dados
  • 2o com rebaixamento (ex. double?int)
  • Possível perda de dados

22
Exemplo de Solução de Sobrecarga
  • Dadas as seguintes funções
  • 1. void f(int n, double m)2. void f(double
    n, int m)3. void f(int n, int m)
  • Estas chamadasf(98, 99) ? Calls 3f(5.3,
    4) ? Calls 2f(4.3, 5.2) ? Calls ???
  • Evita confusão com sobrecarga

23
Conversão Automática de Tipo e Sobrecarga
  • Parâmetros numéricos formais sãotipicamente do
    tipo double
  • Levam em conta qualquer tipo numérico
  • Qualquer dado inferior é automaticamentepromovi
    do
  • int ? double
  • float ? double
  • char ? double Falaremos mais sobre isso!
  • Evita sobrecarga para tipos numéricos diferentes

24
Exemplo de Conversão Automática de Tipo e
Sobrecarga
  • double mpg(double milhas, double
    galoes) return (milhas/galoes)
  • Exemplo de chamada de função
  • mpgComputed mpg(5, 20)
  • Converte 5 e 20 para doubles, então passa
  • mpgComputed mpg(5.8, 20.2)
  • Nenhuma conversão é necessária
  • mpgComputed mpg(5, 2.4)
  • Converte 5 para 5.0, então passa o valor para a
    função

25
Argumentos-padrão
  • Permitem omitir alguns argumentos
  • Especificados na declaração/protótipo de função
  • void showVolume( int length, int width
    1, int height 1)
  • Os últimos 2 argumentos são padrões
  • Chamadas possíveis
  • showVolume(2, 4, 6) //Todos os argumentos
    fornecidos
  • showVolume(3, 5) //Altura padronizada para 1
  • showVolume(7) //Largura e altura padronizados
    para 1

26
Exemplo de Argumentos-padrão
Painel 4.8 página 109
27
Testando e Depurando Funções
  • Muitos métodos
  • Muitos comandos cout
  • Em chamadas e definições
  • Usados para marcar a execução
  • Depurador
  • Ambiente-dependente
  • Macro assert
  • Término prematuro é necessário
  • Stubs and drivers
  • Desenvolvimento incremental

28
A Macro assert
  • Asserção um comando true ou false
  • Usado para documentar e verificar a exatidão
  • Pré-condições e Pós-condições
  • Uso típico Confirmar a validade
  • Sintaxeassert(ltassert_conditiongt)
  • Não retorna valor
  • Avalia assert_condition
  • Termina se falso, continua se verdadeiro
  • Predefinido na Biblioteca ltcassertgt
  • Macros usadas semelhante a funções

29
Um exemplo de macro assert
  • Dada a Declaração de Funçãovoid calculaMoeda
    ( int valorDaMoeda, int numero, int
    quantiaRestante)//Pré-condição 0 lt
    valorDaMoeda lt 100 0 lt quantiaRestante
    lt100//Pós-condição número fixado como igual ao
    número máximo de moedas
  • Verificar a pré-condição
  • assert ((0 lt moedaAtual) (moedaAtual lt 100)
    (0 lt quantiaRestanteAtual)
    (quantiaRestanteAtual lt 100))
  • Se a pré-condição não foi satisfeita ? condição é
    falsa ? programatermina a execução!

30
Um exemplo de macro assert (cont)
  • Útil na Depuração
  • Pára a execução, assim um problema
  • pode ser verificado

31
assert liga/desliga
  • O pré-processador fornece os meios
  • define NDEBUGinclude ltcassertgt
  • Adicionar a linha define antes da linha
    include
  • Desliga todas as asserções através do programa
  • Remover a linha define (ou torná-la
    comentário)
  • Liga as asserções

32
Stubs e Drivers
  • Unidades de Compilação Separadas
  • Cada função é projetada, codificada e testada
  • separadamente
  • Garante a validade de cada unidade
  • Dividir e Conquistar
  • Transformar uma tarefa grande ? menor e
  • gerenciável
  • Mas como testar independentemente?
  • Programas Driver

33
Exemplo de Programas Driver
Painel 4.9 página 111
34
Exemplo de Programas Driver (cont)
Painel 4.9 página 112
35
Stubs
  • Desenvolver incrementalmente
  • Escrever funções de alto-nível primeiro
  • funções de baixo-nível por último
  • Teste funções com Stubs até a implementação
  • Exemplodouble precoUnidade (int diametro,
    double preco) return (9.99) // inválido, mas
    perceptível // um valor temporary
  • Chamadas para função ainda funcionarão

36
Regra Fundamental de Teste
  • Para escrever programascorretos
  • Minimize erros, bugs
  • Garanta a validade dos dados
  • Cada função deve ser testada em um programa
  • em que todas as outras funções já foram
    totalmente
  • testadas e depuradas.
  • Evite erros em cascata e resultados conflitantes

37
Sumário 1
  • Parâmetro Formal é um guardador de lugar,
    preenchido com o argumento atual na chamada de
    função
  • Parâmetros chamados por valor são cópias
    locais no corpo da função que recebe
  • O argumento atual não pode ser modificado
  • Chamados por referência passam o endereço
  • de memória do argumento atual
  • O argumento atual pode ser modificado
  • O argumento DEVE ser uma variável, não
  • uma constante

38
Sumário 2
  • É possível múliplas definições do mesmo nome
    defunção chamado sobrecarga
  • Argumentos-Padrão permitem a chamada de
    funçãoomitir alguns ou todos os argumentos da
    lista
  • Se não fornecidos ? São atribuídos valores-padrão
  • A macro assert finaliza o programa se as
    asserções falharem
  • Funções deveriam ser testadas independentemente
  • Como Unidades de Compilação Separadas,
  • Com drivers
Write a Comment
User Comments (0)
About PowerShow.com