Passando tipos diferentes de funções em c ++

variáveis ​​de ponto flutuante e variáveis ​​de tamanho diferente em C ++ são passados ​​para as funções da mesma maneira que int

variáveis ​​são como demonstrado no seguinte fragmento de código. Este exemplo de trecho passa o valor da variável Darg juntamente com o const double 0,0 para a função maximumFloat ().

// maximumFloat - devolver o maior de dois flutuante // ponto argumentsdouble maximumFloat (d1 dupla, dupla d2) {if (d1 gt; d2) {return D1} return D2-} void otherFunction () {double Darg = 1,0-double dNonNegative = maximumFloat (Darg, 0.0) - // ... Função continua ...

Sobrecarga nomes de função

O tipo dos argumentos são parte do nome prolongado da função. Assim, o nome completo do exemplo função anteriormente é maximumFloat (duas vezes, duas vezes). Você pode diferenciar entre duas funções pelo número de argumentos. Também pode diferenciar entre duas funções pelo tipo dos argumentos, como mostrado no exemplo que se segue:

dupla máxima (d1 dupla, double2) -intmaximum (int n1, int n2) -

Quando você faz a declaração desta forma, fica claro que a chamada máxima (1, 2) refere-se a máxima (int, int), enquanto a chamada máxima (3.0, 4.0) refere-se a máxima (duas vezes, duas vezes).

Definindo funções que têm o mesmo nome mas diferentes argumentos é chamado sobrecarga de função.

Você pode diferenciar pela signedness e duração, bem como:

máximo int (int n1, int n2) -long máximo (longa L1, L2 longa) máxima -unsigned (unsigned UN1, sem assinatura UN2) -

Felizmente, isso raramente é necessário na prática.

De modo misto sobrecarga



As regras podem ficar realmente estranho quando os argumentos na chamada não se alinham exatamente com as declarações. Considere o seguinte trecho de código de exemplo:

máxima de casal (duplo d1, double d2) -intmaximum (n1 int, int n2) -void otherFunction () {(Darg, 0) // cuja função é chamado pelo seguinte double dNonNegative = máxima - // ... função? continuou...

Aqui os argumentos não se alinham exatamente com qualquer declaração. Não há máxima (duplo, int). C ++ poderia razoavelmente tomar qualquer uma das três opções a seguir:

  • Promover a 0 a uma Duplo e chamada máxima (duas vezes, duas vezes).

  • Rebaixar a dupla a um int e invocar máxima (int, int).

  • Vomitar suas mãos eletrônicos e relatar um erro do compilador.

A regra geral é que C ++ irá promover argumentos, a fim de encontrar uma correspondência, mas não vai rebaixar automaticamente um argumento. No entanto, você não pode sempre contar com esta regra.

Não confie em C ++ para descobrir o que você quer dizer- em vez disso, fazer as conversões necessárias explícita:

anular otherFunction (int nArg1, double dArg2) {// use uma conversão explícita para se certificar de que a // função adequada é calleddouble dNonNegative = máximo ((duplo) nArg1, dArg2) -

Agora é claro que você quer dizer para chamar máxima (duas vezes, duas vezes).


Publicações relacionadas