Programar em C++/Funções
Função, do latim functio, onis, representa na computação, um pequeno algoritmo com uma função simples e bem definida. É como se cada função fosse um micro programa, ou um tijolo na construção do programa principal. O uso de funções facilita muito o desenvolvimento, pois, divide o problema principal em pequenos problemas mais simples. Essa técnica se chama, Dividir para conquistar.
A experiência mostra que o uso de funções facilita e acelera a criação e manutenção de sistemas.
Todo programa em C++ tem pelo menos uma função, o main. Veja o exemplo do programa em C++:
#include <iostream> //Biblioteca com funções de entrada e saída de dados
using namespace std;
int main (void) //Função principal do programa
{
cout << "Olá mundo!"; //cout também é uma função, e precisa ser importada da biblioteca iostream
//Esta função main retorna um valor int, ou inteiro, por isso faz a operação de retornar 0
return 0;
}
Do exemplo Olá mundo, vemos que toda função em C++ tem um nome. O nome de uma função junto com o tipo de dados que retorna é chamado assinatura da função.
int main (void) //Assinatura da função main
Essa assinatura informa que a função de nome main retorna na sua execução um valor do tipo int, ou inteiro, e recebe void como parâmetro. Receber void significa que a função não recebe parâmetro, se a função retorna void, significa que não retorna nada. Algumas funções não precisam retornar nenhum valor para funcionar, apenas realizar alguma ação.
Sobrecarga de funções
[editar | editar código]Em C++ duas funções podem ter o mesmo nome se:
- Tiverem um nº diferente de parâmetros e/ou
- Se os parâmetros forem de tipos diferentes (ints floats,..)
A função não pode ser overloaded apenas com diferentes tipo de retorno de função (ie, uma função retornar ints e a outra retornar floats) então os parâmetros é que interessam.
#include <iostream>
using namespace std;
void ConvertFToC(double f, double &c);
void ConvertFToC(float f, float &c);
void ConvertFToC(int f, int &c);
int main()
{
double df, dc;
float ff, fc;
int i_f,i_c; //if is a reserved word
df = 75.0;
ff = 75.0;
i_f = 75;
// The compiler resolves the correct
// version of ConvertFToC based on
// the arguments in each call
cout << "Calling ""double"" version" << endl;
ConvertFToC(df,dc);
cout << df << " == " << dc << endl << endl;
cout << "Calling ""float"" version" << endl;
ConvertFToC(ff,fc);
cout << ff << " == " << fc << endl << endl;
cout << "Calling ""int"" version" << endl;
ConvertFToC(i_f,i_c);
cout << i_f << " == " << i_c << endl << endl;
system ("pause");
}
void ConvertFToC(double f, double &c)
{
cout << "In ""double"" version" << endl;
c = (f - 32.0) * 5. / 9.;
}
void ConvertFToC(float f, float &c)
{
cout << "In ""float"" version" << endl;
c = (f - 32.0) * 5. / 9.;
}
void ConvertFToC(int f, int &c)
{
cout << "In ""int"" version" << endl;
c = (f - 32) * 5. / 9.;
}
O que é que acontece se tivermos um nº diferente de argumentos entre a chamada e a definição?
A solução aqui proposta é quando não sabemos a quantidade de parâmetros que a função vai ser chamada ou mesmo a tipologia desses argumentos, o que se sugere é fazer várias definições para a função e dar a todas elas o mesmos nome, que o compilador vai saber escolher a definição correcta através do nº e tipologia de argumentos.
Entretanto, por boa prática, as funções não devem ser sobrecarregadas se fizerem operações distintas.
Parâmetros default (padrão)
[editar | editar código]Pode acontecer que tenhamos que declara varia vezes o mesmo valor como parâmetro de uma função. Para simplificar a chamada a funções que variam pouco podemos definir uma parâmetro default.
#include <stdio.h>
#include <stdlib.h>
/*-----------------------------Cabeçalho--------------------------------*/
/*Definimos uma funçao*/
void function(int a,int b, int c = 100 )
{
printf("Meu Primeiro argumento :%d\n",a );
printf("Meu Segundo argumento :%d\n",b );
printf("Meu terceiro argumento :%d\n",c );
getchar();
}
int main (void)
{
function( 10, 30);
/* Agora use a função assim e veja o que acontece */
// function( 10,30,999);
}
Os parâmetros por default devem ser os últimos da lista, ou seja, mais à direita. O parâmetro padrão deve ser especificado no protótipo e não na declaração da função.