Definição de Funções
No C++, a estrutura básica de um programa inclui a função principal main, que atua como o ponto de entrada. Uma função é composta por tipo de retorno, nome, parâmetros e corpo.
#include <iostream>
using namespace std;
int principal() // Função principal
{
// Corpo da função
return 0; // Valor de retorno
}
Instrução return
O return é usado para devolver um valor ou encerrar a execução. Funções do tipo void não possuem retorno. Podem existir múltiplos return, mas o primeiro encontrado encerra a chamada.
Exemplo: função para verificar se um número é par.
#include <iostream>
using namespace std;
int verificaPar(int numero)
{
if (numero % 2 == 0)
return 0; // É par
else
return 1; // Não é par
}
int main()
{
int entrada, resultado;
cin >> entrada;
resultado = verificaPar(entrada);
if (resultado == 0)
cout << entrada << " é par";
else
cout << entrada << " não é par";
return resultado;
}
Alternativa com parâmetro por referência:
#include <iostream>
using namespace std;
void checaPar(int valor, int& saida)
{
if (valor % 2 == 0)
saida = 0;
else
saida = 1;
}
int main()
{
int entrada;
int saida;
cin >> entrada;
checaPar(entrada, saida);
if (saida == 0)
cout << entrada << " é par";
else
cout << entrada << " não é par";
return saida;
}
Parâmetros de Função
Parâmetros Formais e Reais
Parâmetros formais são as variáveis na definição da função (escopo local). Parâmetros reais são os valores passados durante a chamada.
Valores Padrão para Parâmetros
Parâmetros podem ter valores padrão, usados quando não fornecidos na chamada.
#include <iostream>
#include <string>
using namespace std;
void exibirDados(string nome, string genero="masculino", int idade=21)
{
cout << nome << " " << genero << " " << idade << endl;
}
int main()
{
exibirDados("João");
exibirDados("Maria", "feminino", 25);
return 0;
}
Formas de Chamada de Função
Chamada por Valor
Passa uma cópia do argumento; alterações dentro da função não afetam a variável original.
#include <iostream>
using namespace std;
void modificaCopia(int copia)
{
copia = 50;
cout << "Valor modificado na cópia: " << copia << endl;
}
int main()
{
int original = 10;
cout << "Valor original: " << original << endl;
modificaCopia(original);
cout << "Valor após chamada: " << original; // Permanece 10
return 0;
}
Chamada por Ponteiro
Passa o endereço da variável; usando desreferência, é possível alterar o valor original.
#include <iostream>
using namespace std;
void modificaViaPonteiro(int* ponteiro)
{
*ponteiro = 100;
cout << "Valor modificado via ponteiro: " << *ponteiro << endl;
}
int main()
{
int variavel = 10;
cout << "Valor inicial: " << variavel << endl;
modificaViaPonteiro(&variavel);
cout << "Valor após chamada: " << variavel; // Alterado para 100
return 0;
}
Chamada por Referência
Passa um apelido para a variável original; modificações refletem diretamente.
#include <iostream>
using namespace std;
void modificaReferencia(int& refer)
{
refer = 200;
cout << "Valor modificado via referência: " << refer << endl;
}
int main()
{
int variavel = 10;
cout << "Valor inicial: " << variavel << endl;
modificaReferencia(variavel);
cout << "Valor após chamada: " << variavel; // Alterado para 200
return 0;
}
Funções de Biblioteca Padrão
Bibliotecas padrão fornecem funções pré-definiads. Eexmplos incluem cmath para operações matemáticas e algorithm para algoritmos genéricos.
cmath
Funções comuns:
abs(x): valor absoluto.sqrt(x): raiz quadrada.pow(x, y): potência.round(x): arredondamento.fmax(x,y)/fmin(x,y): máximo/mínimo entre floats.ceil(x)/floor(x): arredondamento para cima/baixo.
algorithm
Funções comuns:
max(x,y)/min(x,y): máximo/mínimo.find(início, fim, valor): busca de elemento.sort(início, fim): ordenação (crescente por padrão).reverse(início, fim): inversão de intervalo.