Passando diferentes tipos 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 forma que int

variáveis ​​são como demonstrado no seguinte trecho 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> d2) {return D1-} retornar D2-} otherFunction void () {double darg = 1,0-double dNonNegative = maximumFloat (darg, 0.0) - // ... função continua ...

Sobrecarregando os nomes de funções

O tipo dos argumentos são parte do nome prolongado da função. Assim, o nome completo da função exemplo anterior é maximumFloat (double, double). Você pode diferenciar entre duas funções pelo número de argumentos. Também é possível diferenciar entre as duas funções pelo tipo dos argumentos, como mostrado no exemplo a seguir:

dupla máxima (d1 casal, 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 (double, double).

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áxima int (int n1, int n2) -long máximo (tempo 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 (double, int). C ++ poderia razoavelmente tomar qualquer uma das três opções a seguir:

  • Promover a 0 a uma duplo e chamada máxima (double, double).

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

  • Vomitar suas mãos electró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 essa regra.

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

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

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

menu