Baixe Aula-10 - Funcoes (3) e outras Notas de aula em PDF para Informática, somente na Docsity!
Funções
Aula nº 10 Classes de armazenamento Escopo Recursão Funções inline
Classes de Armazenamento
- (^) C++ fornece 5 classes de armazenamento: - (^) auto; - (^) register; - (^) extern; - (^) static; - (^) mutable (para tipos definidos pelo usuário). automátic a estática
Classes de Armazenamento
- (^) automática – a variável é criada quando o bloco é ativado e existe enquanto o bloco estiver ativo; é destruída quando termina a execução do bloco. - (^) auto; - (^) register. auto int x, y;
- (^) Variáveis locais de uma função são automáticas por default. register int cont;
Classes de Armazenamento
- (^) estática – existe desde quando o programa começa a ser executado e só é destruída ao final do programa; - (^) static; - (^) extern.
- (^) Variáveis globais e nomes de função são externas por default;
- (^) Variáveis locais serão estáticas se declaradas com especificador static: static int cont = 1;
void F() { int x=1; cout <<"A funcao F foi chamada pela “ <<x<<"a vez.\n\n"; x++; return; }
#include using namespace std; void F(); int main() { F (); F (); F (); return 0; } void F() { int x=1; cout <<“O valor de x eh ”<<x<<“.\n\n"; x++; return; }
Exemplo 2 – estática
#include using namespace std; void F(); int main() { F (); F (); F (); return 0; }
void F() { static int x=1; cout <<"A funcao F foi chamada pela “ <<x<<"a vez.\n\n"; x++; return; }
09/10/2008 Funções (3) 13 - 29 #include using namespace std; void F (); int main() { F (); F (); F (); system("PAUSE"); return 0; } void F ( ) { static int x=1; cout << "A funcao F foi chamada pela " <<x<<"a vez.\n\n"; x 123 A funcao F foi chamada pela 1a vez. A funcao F foi chamada pela 2a vez.
A funcao F foi chamada pela 3a vez. Fim
Regras de Escopo
- (^) Escopo de um identificador é o local onde se pode fazer referência a ele; - (^) Escopo de arquivo; - (^) Escopo de função; - (^) Escopo de bloco; - (^) Escopo de protótipo de função.
Regras de Escopo
- (^) Escopo de bloco
- (^) identificadores declarados dentro de um bloco - parâmetros de função - variáveis locais - variáveis locais static também têm escopo de bloco, embora existam desde que o programa começa a ser executado.
Regras de Escopo
- (^) Escopo de bloco (continuação)
- (^) identificadores em bloco externo com mesmo nome de outro em bloco interno é escondido pelo interno if (x = = 8){ int a = 3; for (int a = 1; a<=10; a++) cout << a << endl; cout << a; } Isso não é possível com alguns compiladores – redeclaração de variáveis
Recursão
- (^) Uma função recursiva é uma função que chama a si mesma, direta ou indiretamente;
- (^) Na realidade, a função só sabe resolver os casos mais simples – o caso básico;
- (^) Quando a função é chamada com um problema mais complexo, ela divide o problema em duas partes – uma que ela sabe resolver e outra que não;
Recursão
- (^) A parte que ela não sabe resolver deve ser parecida com o problema original; então, a função chama a si própria para resolver o novo problema;
- (^) Assim, a função se auto-convoca quantas vezes for necessário até que o último problema seja o básico e um valor possa ser retornado para a função ativa.