O documento discute o conceito de funções em C++. Resume as seguintes informações essenciais:
1) Uma função é um conjunto de instruções agrupadas com um nome para executar uma tarefa específica. Qualquer sequência de código que se repete é candidata a ser uma função;
2) As funções permitem dividir um programa grande em partes menores e reutilizáveis, melhorando a organização do código;
3) Os principais elementos de uma função são o cabeçalho, parâmetros e corpo.
1. Instituto Federal do Rio Grande do Norte – IFRN
Câmpus Natal – Zona Norte
sexta-feira, 30 de maio de 2014 1
Funções
Odair Soares / Melquisedeque Vieira
2. Funções
• Uma função é um conjunto de instruções desenhadas
para cumprir determinada tarefa e agrupadas em uma
unidade com um nome para referi-la.
• Qualquer sequência de instruções que apareça mais de
uma vez no programa é candidata a ser uma função;
• O código de uma função é agregado ao programa uma
única vez e pode ser executado muitas vezes no decorrer
do programa.
O que é?
sexta-feira, 30 de maio de 2014 2
3. Funções
tipo nome (parâmetros) {
instrução 1;
...........;
...........;
instrução n;
return;
}
Sintaxe
sexta-feira, 30 de maio de 2014 3
4. Funções
• Para dar um nome a uma função você deve seguir as
mesmas orientações determinadas para os nomes de
variáveis;
• O nome de uma função pode ser qualquer um, com
exceção de main, reservado para a função que inicia a
execução do programa;
• Em todo programa deve existir uma e uma única função
chamada de main;
• O programa termina quando for encerrada a execução da
função main.
O nome das funções
sexta-feira, 30 de maio de 2014 4
6. Funções
• Permite que o compilador saiba que se
trata de uma função;
• Podem estar vazios ou não. Trataremos
deste assunto nos próximos slides.
Os parênteses após o nome das funções
sexta-feira, 30 de maio de 2014 6
7. Funções
• Toda função C++ deve começar com
uma chave de abertura de bloco { e
terminar com uma chave de fechamento
de bloco }. As chaves delimitam o corpo
da função.
Chaves
sexta-feira, 30 de maio de 2014 7
8. • Permite que outros programadores
utilizem em seus programas;
• É como contratar uma mão-de-obra
externa para executar uma certa tarefa;
• Reduz o tamanho do programa;
Funções
Por que usar funções?
sexta-feira, 30 de maio de 2014 8
9. • quando o controle do programa encontra uma
instrução que inclui o nome de uma função, a
função é chamada.
• Chamar uma função é o meio pelo qual
solicitamos que o programa desvie o controle e
passe a executar as instruções da função e, ao
término desta, volte o controle para a posição
seguinte à da chamada à função;
Funções
Chamando uma função
sexta-feira, 30 de maio de 2014 9
10. Vária funções são desenvolvidas por
programadores e fornecidas gratuitamente
pela linguagem C++.
Ex.:
Getche(), system(), printf(), setw(),
Funções
Chamando uma função
sexta-feira, 30 de maio de 2014 10
11. celsius()
Vamos começar mostrando uma função que
converte a temperatura de graus Fahrenheit
para graus Celsius:
Funções
Primeira função
sexta-feira, 30 de maio de 2014 11
13. O propósito principal de escrita de
protótipos de funções é o de fornecer ao
compilador as informações necessárias
sobre o tipo da função, o número e o tipo
dos argumentos.
Funções
O protótipo de funções
Tipo_retorno nome_Função (lista_de_parâmetros);
sexta-feira, 30 de maio de 2014 13
Cuidado para não
esquecer o ponto
e vírgula!!
14. • Deve preceder sua definição e sua chamada;
• É a declaração de uma função;
• É colocado, em geral, no início do programa;
• Estabelece o tipo da função e os argumentos
que ela recebe.
Funções
O protótipo de funções
Tipo_retorno nome_Função (lista_de_parâmetros);
sexta-feira, 30 de maio de 2014 14
15. •Externo:
Escrito antes de qualquer função. É feita uma
única vez e é visível para todas as funções que
a chamam.
•Local:
É escrita no corpo da função que a chama e
antes da sua chamada.
Funções
Protótipo externo e local
sexta-feira, 30 de maio de 2014 15
17. Funções
Eliminando o protótipo de funções
• Se a função for escrita antes da instrução de sua chamada,
seu protótipo não será obrigatório.
• O exemplo anterior poderia ser escrito da seguinte maneira:
sexta-feira, 30 de maio de 2014 17
19. Funções
Tipos de funções
• É definido pelo valor que ela retorna por meio do comando
return.
• Uma função é do tipo int quando retorna um valor do tipo int.
• Em C++, os tipos de funções são os mesmos de variáveis,
exceto quando a função não retorna nada. Nesse caso, ela é
do tipo void.
sexta-feira, 30 de maio de 2014 19
20. Funções
O comando return
• Em funções do tipo void, o comando return não é obrigatório;
• O valor de retorno de uma função é acessado na instrução de
chamada por meio do nome da função seguido de parênteses
contendo ou não argumentos. Ex.:
c = celsius(f); //Chamada à função
• Esse valor poder ser atribuído a uma variável ou fazer parte
de alguma expressão;
• Várias instruções return podem fazer parte de uma função,
mas apenas uma será executada.
sexta-feira, 30 de maio de 2014 20
22. Funções
Limitações do comando return
• O comando return pode retornar somente um único valor para
a função que chama.
sexta-feira, 30 de maio de 2014 22
23. Funções
Definição da função
O código C++ que descreve o que a função faz é chamado de
definição da função. Sua forma geral é a seguinte:
tipo nome (declaração dos parâmetros)
{
Instruções;
}
• Cabeçalho
• Corpo
sexta-feira, 30 de maio de 2014 23
24. Funções
Parâmetros da função
• As variáveis que receberão as informações enviadas a uma
função são chamadas de parâmetros;
• Devem ser declaradas entre parênteses, no cabeçalho de sua
definição;
• Podem se utilizados livremente no corpo da função;
• São acessados somente pela função onde foram declarados.
sexta-feira, 30 de maio de 2014 24
25. Funções
Passagem por valor
• A função recebe apenas uma cópia do valor passado para ela
e o guarda em uma variável local existente no seu corpo;
• O valor da variável original não é alterado porque a função
não tem acesso a mesma.
sexta-feira, 30 de maio de 2014 25
27. Funções
Funções que não retornam nada: Tipo void
• Uma função que não retorna nada é do tipo void. Como
exemplo, escreveremos uma função que desenha uma linha
com um certo número de asteriscos:
sexta-feira, 30 de maio de 2014 27
29. Funções
Funções que não recebem e não retornam nada
• Quando uma função não recebe nenhum argumento,
devemos especificar no seu protótipo, entre parênteses, com
void.
• A função seguinte usa o caractere ‘a’, chamado de BELL,
para tocar o alto-falante. Observe que ela não recebe e não
retorna nada.
sexta-feira, 30 de maio de 2014 29
31. Funções
Passando vários argumentos
sexta-feira, 30 de maio de 2014 31
• Vários argumentos podem ser passados entre parênteses
separados por vírgula, na chamada da função;
• A seguir, temos um exemplo de programa que passa dois
argumentos para uma função:
33. Funções
Escrevendo várias funções no mesmo
programa
sexta-feira, 30 de maio de 2014 33
• Você pode escrever quantas funções quiser no mesmo
programa;
• Qualquer função poder chamar uma outra função;
• Em C++, não é permitido definir uma função dentro de outra
função.
35. Funções
Chamadas a funções usadas como argumentos
de outras funções
sexta-feira, 30 de maio de 2014 35
• Podemos também chamar uma função como argumento para
outra função.
• A sintaxe é a mesma utilizada na chamada de variáveis como
argumentos para funções.
• Exemplo:
37. Funções
O operador Unário de referência: &
sexta-feira, 30 de maio de 2014 37
• Com o operador de referência, podemos montar novos tipos
de dados chamados de referências;
• Referência é um outro nome para uma variável já existente;
• Como usar: int n;
int& A = n;
Se o valor de A for alterado, o
valor de n também será alterado.
Se o valor de n for alterado, o
valor de A também será alterado.
Indica que A é um outro nome
para n.
38. Funções
O operador Unário de referência: &
sexta-feira, 30 de maio de 2014 38
Não é um cópia da variável a que se refere, é a mesma variável
sob nomes diferentes.
int n;
int& A = n;
N = 5;
cout << A;
A = 8;
cout << n;
Nas instruções:
Que valores são
impressos?
39. Funções
O operador Unário de referência: &
sexta-feira, 30 de maio de 2014 39
Toda referência deve obrigatoriamente ser inicializada.
int n;
int& A;
int& A = n;
ERRADO!
CERTO!
40. Funções
Passagem por referência
sexta-feira, 30 de maio de 2014 40
• Um dos usos de referências é na passagem de
argumentos para funções;
• A principal vantagem da passagem por referência, é a
de que a função pode acessar as variáveis da função
que chamou;
• Isso possibilita que uma função retorne mais de um
valor para a função que chama;
• Os valores a serem retornados são colocados em
referências de variáveis da função chamadora.
43. Funções
Referências constantes
sexta-feira, 30 de maio de 2014 43
• Você pode combinar a palavra-chave const com a
declaração de uma referência;
• Essas declarações fazem de A um nome “read-only”
para n;
int n = 456;
const int& A = n;
44. Funções
Referências constantes
sexta-feira, 30 de maio de 2014 44
• Utilizamos referências constantes quando não
precisamos alterar o valor das variáveis enviadas
como argumentos;
• O uso de referências constantes é um meio de
economia de memória.
Exemplo:
void imprime_Quadrado(const double& n, const double& m);
46. Funções
Valores default para os argumentos de uma
função
sexta-feira, 30 de maio de 2014 46
• Uma função pode ser chamada sem serem
especificados nenhum de seus argumentos;
• O protótipo de uma função pode fornecer valores
default para esses argumentos não especificados;
• Se forem omitidos os argumentos correspondentes
na chamada à função, os valores default serão
automaticamente usados;
• Se forem especificados, estes serão respeitados e
usados;
47. Funções
Valores default para os argumentos de uma
função
sexta-feira, 30 de maio de 2014 47
Exemplo:
void linha(int n = 20, char ch = ‘*’);
49. Funções
Valores default para os argumentos de uma
função
sexta-feira, 30 de maio de 2014 49
Se um argumento for omitido, todos os subsequentes deverão sê-
lo:
linha(,‘*’); //ERRO
Após a primeira especificação com valor default, todos os
parâmetros seguintes devem ser especificados com valor default:
linha(int n = 20, char ch); //ERRO
linha(int n, char ch = ‘*’); //CORRETO
50. Funções
Sobrecarga de funções
sexta-feira, 30 de maio de 2014 50
• Significa criar uma família de funções com o mesmo nome;
• Mas devem ter a lista de argumentos diferentes ou em número
ou em tipo;
• É por meio dos argumentos que o sistema reconhece qual
função deverá ser chamada;
53. Funções
sexta-feira, 30 de maio de 2014 53
Funções inline
• Escrevemos funções inline exatamente da mesma maneira como
escrevemos funções comuns, exceto pela inclusão do
qualificador inline no início da definição da função.
• A palavra chave inline, quando colocada no início do cabeçalho
da definição de uma função, causa a inserção de uma nova cópia
da função em todo lugar onde ela é chamada;
• A definição de uma função inline deve preceder a primeira
chamada a ela.
54. Funções
sexta-feira, 30 de maio de 2014 54
Funções inline: quando usar?
• Quando escrevemos funções pequenas, podemos poupar tempo
de execução colocando o código da função diretamente no
programa. Se a função é muito pequena (uma ou duas
instruções), as instruções necessárias à sua chamada podem
ocupar mais espaço de memória que as instruções do seu
próprio código. Em casos semelhantes, é aconselhável criar
funções inline.
55. Funções
sexta-feira, 30 de maio de 2014 55
Funções recursivas
• Uma função é recursiva quando dentro dela está presente uma
instrução de chamada a ela própria.
• Três pontos devem ser lembrados quando queremos escrever
uma função recursiva:
1. Definir o problema em termos recursivos;
2. Encontrar a condição básica;
3. Toda vez que a função é chamada recursivamente, deve estar
mais próxima de satisfazer a condição básica.
56. Funções
sexta-feira, 30 de maio de 2014 56
Funções recursivas
1. Definir o problema em termos recursivos
Isso significa definir o problema usando ele mesmo na definição. O
fatorial de um número n qualquer pode ser definido por meio da seguinte
expressão:
n! = n * (n - 1)!
57. Funções
sexta-feira, 30 de maio de 2014 57
Funções recursivas
2. Encontrar a condição básica:
Toda função recursiva deve ter uma condição de término chamada de
condição básica. A função fatorial(), quando chamada, verifica se n é
zero. Se essa condição for satisfeita, interrompe a recursão.
58. Funções
sexta-feira, 30 de maio de 2014 58
Funções recursivas
3. Cada vez que a função é chamada recursivamente, deve estar
mais próxima de satisfazer a condição básica:
Isso garante que o programa não girará em uma sequência infindável de
chamadas. Em nossa função, a cada chamada a função, o valor de n
estará mais próximo de zero.