Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução ......................................................................................................................... 2
Objetivos....................................................................................................................... 2
Objetivos gerais:. ...................................................................................................... 2
Objetivos específicos: ............................................................................................... 2
Metodologia .............................................................................................................. 2
Contextualização .............................................................................................................. 3
Funções ......................................................................................................................... 3
Definição de função em C++ .................................................................................... 3
Sintaxe de uma função na linguagem C++ ............................................................... 3
Descrição da sintaxe: ................................................................................................ 4
Declaracao de Funções em C++. .............................................................................. 5
Definição de Função em C++ ................................................................................... 5
Tipo de retorno ............................................................................................................. 5
Retorno Void: ............................................................................................................ 5
Retorno de tipos primitivos: Sintaxe: ....................................................................... 6
Objetos/structs/classes: sintaxe: ............................................................................... 6
Ponteiros: ...................................................................................................................... 7
Chamada da Função...................................................................................................... 7
Parâmetros .................................................................................................................... 8
Tipos de Parâmetros em C++ ....................................................................................... 9
Relação de parâmetros com Tipos de Retorno ........................................................... 14
Escopo das Variáveis: ..................................................................................................... 15
Tipos de funções na linguagem C++ .......................................................................... 17
Boas praticas ............................................................................................................... 23
Conclusão ....................................................................................................................... 26
Referencias bibliográficas .............................................................................................. 27
Introdução
Objetivos
Metodologia
Funções
Funções são blocos de códigos usados para armazenar instruções de códigos para serem
usados em programas sem precisar escrever novamente blocos de códigos de estrutura
semelhantes.
É uma forma de otimizar um código criando comandos uma só vez para situações que se
necessita usar os mesmos diversas vezes. Havendo essa necessidade de usar o código
diversas vezes não sendo necessariamente parecido em todos os aspetos, mas sim em
aspetos de repetetividade de sintaxe de código comandos. É necessário e suficiente dizer
que escrever mesmas instruções e comandos o tempo inteiro consome maior espaço
tornando o código longo e difícil de interpretar como de manutenciar.
Baseado nisso, verifica-se também que é suficiente inferir que as funções servem de
maneira necessária para otimizar o programa declarando funções ou melhor, declarando
uma função e usá-la tantas vezes achar-se suficiente.
Uma função em C++ é um bloco de código que executa alguma operação. Uma função
pode receber e retornar valores, ou não. As funções são úteis para organizar e reutilizar o
código.
1. tipo_de_retorno nome_da_funcao(lista_parâmetros) {
2. // Código da função
3. return valor_de_retorno; // Opcional}
Descrição da sintaxe:
Tipo_de_retorno: este é o tipo de dado que a função retorna. Pode ser um tipo
de dado embutido (como ‘int’, ‘float’, ‘char’, etc ), em casos em que a função não
retorna algum valor usa-se o tipo (‘void’) que com detalhes se vai abordar mais
em diante quando se estiver falando dos tipos de retorno.
Nome_da_funcao: este é o identificador da função, ou seja, é o nome que se
atribui a determinada função a fim de que sendo necessário usar essa função seja
chamada pelo nome a que se atribui.
Deve ser único e seguir as regras de nomenclatura de C++.
Lista_parametros: estes são os valores que a função aceita como entrada. São
opcionais e podem ser de qualquer tipo, incluindo tipos de dados embutidos.
Código da função: é o conjunto de instruções que a função executa quando é
chamada;
return valor_de_retorno: esta é a parte em que o programa retorna algo, para o
caso é opcional, podendo retornar um valor ou não. O valor que é retornado
depende do tipo de retorno que foi declarado.
Essa função também pode ser desenvolvida da maneira como se expressa em baixo:
1. //esta funcao soma pode ser colocada dessa maneira
2. int soma (int a, int b){
3. cout << "\ Funcao que retorna Soma de dois numeros";
5. int resultado= a+b; 10. return resultado;}
Declaracao de Funções em C++.
A declaração de função especifica o nome da função, o tipo de valor de retorno (ou "void"
se a função não retornar nenhum valor) e os parâmetros que a função aceita.
Exemplo de uma declaracao:
1. int soma (int a, int b)
A definição de função fornece a implementação real da função, ou seja, o código que será
executado quando a função for chamada. A definição inclui o nome da função, o tipo de
retorno, os parâmetros e o corpo da função.
Exemplo de definição de uma função:
int soma(int a, int b) {
return a + b;}
Tipo de retorno
Os tipos indicam qual é o tipo de valor a função irá retornar apos sua execução. São
especificados no início da função. Vários são os tipos de retornos que podem ser usados:
Retorno Void: Os retornos do tipo void não retornam valor algum. São usadas para
realizar ações ou tarefas sem produzir um resultado.
sintaxe:
1. void nome_da_funcao(Lista_parametros) {
Código;}
Exemplo:
1. void imprimirMensagem() {
std::cout << "Esta função não retorna valor." <<
std::endl;}
Retorno de tipos primitivos: Esse tipo de retorno, retorna valores de tipos
primitivos como (char, int, float, double) ou qualquer outro tipo de dados padrão do C++.
Sintaxe:
1. tipo_retorno nome_da_funcao(lista_parametros){
2. código;
3. return valor;}
Exemplo:
Sintaxe:
1. TipoRetorno NomeDaFuncao() {
2. TipoRetorno objeto; // Cria uma instância do objeto
da classe/struct
3. // Realiza alguma inicialização ou processamento no
objeto
4. return objeto; // Retorna o objeto}
Exemplo:
1. class Pessoa {
2. public:
3. std::string nome;
4. int idade;
5.
6. Pessoa(std::string n, int i) : nome(n), idade(i) {}};
8. Pessoa criarPessoa() {
9. Pessoa pessoa("João", 30);
10. return pessoa; }
Ponteiros: Esse tipo de retorno, retorna ponteiros. Útil para retornar um endereço
de memoria para um objeto ou uma matriz alocada dinamicamente.
Sintaxe:
1. tipo_de_ponteiro nome_da_funcao(lista_parametros){
2. Código;}
Exemplo:
Chamada da Função
Sintaxe:
1. nomeDaFuncao(argumento1, argumento2, ...);
Parâmetros
Isso significa que, quando você chama uma função e passa parâmetros
por valor, qualquer alteração feita nos parâmetros dentro da função não
terá efeito sobre as variáveis originais fora da função.
Exemplo:
1. void duplicar(int& numero) {
numero *= 2; // Modifica a variável original}
Exemplo:
• Para chamar uma função com parâmetros por referência, usamos o operador & na
lista de argumentos da chamada da função. Por exemplo:
1. int a = 10;
2. int b = 20;
3. swap(a, b); // chamada da função swap que passa as
variáveis a e b por referência
• Os parâmetros por referência permitem que uma função modifique o valor da va-
riável original que foi passada como argumento, pois ela tem acesso ao seu ende-
reço de memória. Qualquer alteração feita no parâmetro dentro da função é refle-
tida na variável fora da função. Por exemplo:
1. void swap(int &x, int &y); // declaração da função swap
que recebe dois inteiros por referência e troca seus valores
2. int a = 10;
3. int b = 20;
4. cout << "Antes da troca: " << a << " " << b << endl; //
imprime Antes da troca: 10 20
5. swap(a, b); // chamada da função swap que passa as
variáveis a e b por referência e troca seus valores
6. cout << "Depois da troca: " << a << " " << b << endl; //
imprime Depois da troca: 20 10
Sintaxe:
1. TipoDoParâmetro* NomeDoParâmetro
São regiões do código onde os nomes de variáveis , funções, classes e outros elementos
podem ser declarados e acessados
➢ Escopo Global:
O escopo global é o escopo mais amplo em um programa C++. Nomes declarados
no escopo global são visíveis em todo o código, a menos que sejam sombreados
por nomes idênticos em escopos mais internos. Nomes no escopo global têm
duração estática, o que significa que eles existem durante toda a execução do
programa. Exemplo:
1. #include <iostream>
2. int x = 10; // Variável global
3. void f() {
4. std::cout << x << std::endl; // Acesso à variável global
x}
5.
6. int main() {
7. std::cout << x << std::endl; // Acesso à variável global
x
8. f(); // Chamada da função f
9. return 0;}
➢ Escopo de Bloco:
O escopo de bloco é introduzido por chaves `{}` e se limita aos blocos delimitados
por essas chaves. Nomes declarados em um escopo de bloco são visíveis apenas
dentro desse bloco e em blocos aninhados a ele. Nomes no escopo de bloco têm
duração automática, existindo apenas enquanto o bloco está sendo executado.
Exemplo:
3. int main() {
4. int x = 10; // Variável local no escopo da função main
5. std::cout << x << std::endl; // Acesso à variável local
x
6. if (x > 0) {
7. int y = 20; // Variável local no escopo do bloco if
8. std::cout << x << " " << y << std::endl; // Acesso às
variáveis locais x e y
9. }
10. return 0;}
➢ Escopo de Classe:
O escopo de classe é introduzido por uma definição de classe. Nomes declarados
em um escopo de classe são acessíveis somente dentro da classe ou através de
objetos ou ponteiros para objetos dessa classe. Nomes no escopo de classe têm
duração dependente da duração dos objetos da classe. Exemplo:
3. #include <iostream>
4.
5. class Point {
6. public:
7. double x; // Membro de dados no escopo da classe Point
8. double y; // Membro de dados no escopo da classe Point
9.
10. void print() { // Membro de função no escopo da classe
Point
11. std::cout << "(" << x << ", " << y << ")" << std::endl;
// Acesso aos membros de dados x e y
12. }};
13.
14. int main() {
15. Point p1; // Objeto da classe Point
16. p1.x = 1.0; // Acesso ao membro de dados x através do
objeto p1
17. p1.y = 2.0; // Acesso ao membro de dados y através do
objeto p1
18. p1.print(); // Chamada do membro de função print através
do objeto p1
19. return 0;}
➢ Escopo de Namespace:
O escopo de namespace é introduzido por uma definição de namespace. Nomes
declarados em um escopo de namespace são acessíveis apenas dentro do
namespace ou por meio de qualificadores de escopo (`::`) ou diretivas de uso
(`using`). Nomes no escopo de namespace têm duração estática, existindo durante
toda a execução do programa. Exemplo Escopo de Namespace:
1. #include <iostream>
2.
3. namespace math {
4. const double pi = 3.14; // Constante no escopo do
namespace math
5.
6. double square(double x) { // Função no escopo do
namespace math
7. return x * x;
8. }}
9.
10. int main() {
11. std::cout << math::pi << std::endl; // Acesso à constante
pi usando o qualificador de escopo
12. std::cout << math::square(2.0) << std::endl; // Chamada
da função square usando o qualificador de escopo
13.
14. using namespace math; // Diretiva de uso do namespace
math
15. std::cout << pi << std::endl; // Acesso à constante pi
sem o qualificador de escopo
16. std::cout << square(3.0) << std::endl; // Chamada da
função square sem o qualificador de escopo
17. return 0;}
Em C++ as funções são usadas para diferentes fins, existem os tipos que são mais
aplicáveis para determinado fim, assim, os tipos de funções ilustram a forma como estão
dispostos e podem ser usadas.
1. Funções de retorno void: Essas funções não retornam um valor. São usadas para
executar ações sem produzir um resultado.
Sintaxe:
1. void nomeDaFuncao(parametros) {
2. // Código da função}
Exemplo:
1. void saudacao() {
2. std::cout << "Olá, mundo!" << std::endl;}
2. Funções com retorno: Essas funções retornam um valor após a execução. O tipo de
retorno é especificado na declaração da função.
Sintaxe:
1. tipoDeRetorno nomeDaFuncao(parametros) {
2. // Código da função
3. return valorDeRetorno;}
Exemplo:
1. int soma(int a, int b) {
2. return a + b;}
3. Funções com parâmetros: As funções podem receber parâmetros que são usados
dentro da função. Eles são passados na chamada da função.
Sintaxe:
1. tipoDeRetorno nomeDaFuncao(tipoParametro parametro1,
tipoParametro parametro2, ...) {
2. // Código da função usando parâmetros}
Exemplo:
1. double media(double a, double b) {
2. return (a + b) / 2.0;}
Exemplo:
1. int maximo(int a, int b) {
2. return (a > b) ? a : b;}
4.
5. double maximo(double a, double b) {
6. return (a > b) ? a : b;}
5. Funções inline: são aquelas que o compilador tenta otimizar substituindo a chamada
da função pelo código real da função. Elas são úteis para pequenas funções que são
chamadas com frequência, pois reduzem a sobrecarga de chamada de função.
Sintaxe:
1. inline tipoDeRetorno nomeDaFuncao(parametros) {
2. // Código da função}
Exemplo:
inline int dobro(int x) {
return 2 * x;}
6. Funções recursivas: são aquelas que chamam a si mesmas para resolver um problema.
Elas são úteis para resolver problemas que podem ser divididos em sub problemas
semelhantes.
Exemplo de função fatorial recursiva:
1. int fatorial(int n) {
2. if (n <= 1) {
3. return 1;
4. } else {
5. return n * fatorial(n - 1);}}
7. Funções lambda: são funções anônimas e inline que podem ser usadas localmente.
Elas são úteis para passar pequenos blocos de código como argumentos para outras
funções, como algoritmos da STL (Standard Template Library).
Sintaxe:
1. [captura](parametros) -> tipoDeRetorno {
2. // Código da função}
Exemplo:
1. auto soma = [](int a, int b) -> int {
2. return a + b;};
Exemplo:
1. class Retangulo {
2. public:
3. double calcularArea() {
4. return largura * altura;}
6. private:
7. double largura;
8. double altura;};
9. Funções virtuais: são funções membros que podem ser redefinidas em classes
derivadas. Elas são usadas para implementar o polimorfismo em programação orientada
a objetos, permitindo que objetos de diferentes classes se comportem de forma diferente
quando chamam a mesma função.
Sintaxe:
classClasseBase{
public:
virtualtipoDeRetorno nomeDaFuncao(parametros){
// Código da função virtual na classe base}};
classClasseDerivada: publicClasseBase {
public:
tipoDeRetorno nomeDaFuncao(parametros)override{
// Código da função virtual na classe derivada}};
Exemplo:
classAnimal{
public:
virtualvoidfazerSom(){
cout << "Animal faz som"<< endl;}};
classCachorro: publicAnimal {
public:
voidfazerSom()override{
cout << "Cachorro faz au au"<< endl;}};
classGato: publicAnimal {
public:
voidfazerSom()override{
cout << "Gato faz miau"<< endl; }};
10. Funções amigas: são funções que não pertencem a uma classe, mas podem acessar
os membros privados e protegidos dessa classe. Elas são usadas para permitir que outras
funções ou classes tenham acesso especial aos dados internos de uma classe.
Sintaxe:
classMinhaClasse{
// Membros privados e protegidos da classepublic:
friendtipoDeRetorno nomeDaFuncao(parametros); //
Declaração da função amiga};
tipoDeRetorno nomeDaFuncao(parametros){
// Código da função amiga que pode acessar os membros
privados e protegidos da classe}
Exemplo:
classRetangulo{
doublelargura;
doublealtura;
public:
Retangulo(doublel, doublea) : largura(l), altura(a) {}
frienddoublecalcularArea(Retangulo r); // Declaração da
função amiga};
doublecalcularArea(Retangulo r){
returnr.largura * r.altura; // Acesso aos membros
privados largura e altura da classe Retangulo}
11. Funções puras: são funções que não têm efeitos colaterais, ou seja, não alteram o
estado do programa ou dependem de fatores externos. Elas são usadas para garantir a
consistência e a previsibilidade dos resultados, facilitando o teste e a depuração do código.
Exemplo de função impura:
int contador = 0;
int incrementar(){
contador++; // Altera o estado do programa
return contador;
}
int aleatorio(){
return rand(); // Depende de um fator externo (gerador
de números aleatórios)}
Boas praticas
Criar funções em C++ de acordo com boas práticas é fundamental para escrever código
legível, manutenível e eficiente. Eis algumas diretrizes de boas práticas ao criar funções
em C++:
Nomenclatura Descritiva: Dar nomes descritivos às funções que indiquem claramente
sua finalidade. Evitar nomes genéricos ou abreviações obscuras;
Parâmetros Significativos: Escolher nomes de parâmetros descritivos que expliquem
propósito. Isso torna o código mais legível;
Limitação do Tamanho: Manter as funções curtas e focadas em uma única tarefa. Fun-
ções muito longas são difíceis de entender e manter;
Comentários e Documentação: Incluir comentários ou documentação explicando o que
a função faz, seus parâmetros e valores de retorno. Ferramentas como Doxygen podem
ajudar na geração de documentação;
Evite Efeitos Colaterais: Tentar evitar que suas funções modifiquem variáveis fora de
seu escopo local, a menos que seja necessário. Funções com efeitos colaterais podem
tornar o código mais difícil de depurar e entender;
Retornos Claros: Especificar o tipo de retorno da função de forma clara. Se uma função
não retornar um valor, usar `void` como tipo de retorno;
Validação de Parâmetros: Fazer a validação de parâmetros e manipulação de erros de
forma apropriada. Isso ajuda a evitar comportamento inesperado.
Evite Funções com Muitos Parâmetros: Evitar funções com muitos parâmetros, pois
isso pode tornar a chamada e a manutenção mais complexas. Usar estruturas ou classes
para agrupar parâmetros relacionados;
Usar Referências e Ponteiros Adequadamente: Usar referências ou ponteiros quando
necessário para evitar cópias desnecessárias de objetos grandes. Certificar-se de enten-
der as diferenças entre referências e ponteiros.
Consistência com Convenções da Linguagem: Siguir as convenções de codificação da
linguagem C++ para facilitar a leitura do código por outros desenvolvedores. Por exem-
plo, siguir as convenções de nomenclatura, indentação e formatação.
Evite Funções com Muitas Responsabilidades: Siguir o princípio da "única responsabi-
lidade" ao projetar funções. Cada função deve fazer uma tarefa bem definida e não ten-
tar fazer muitas coisas ao mesmo tempo;
Testes Unitários: Escrever testes unitários. Isso ajuda a garantir que as funções funcio-
nem conforme o esperado e permite detectar regressões quando faz-se alterações no có-
digo.
❖ C++ vs. Python: Python não exige a declaração de tipos de dados para parâmetros
ou retornos de função. C++ requer tipagem estrita.
- Python é interpretado, o que significa que as funções podem ser defini-
das e chamadas dinamicamente. Em C++, o código deve ser compilado
antes da execução.
- Em Python, as funções podem retornar múltiplos valores como uma tu-
pla. Em C++, isso é possível apenas retornando um objeto de uma estru-
tura de dados personalizada.
❖ C++ vs. PHP: PHP é uma linguagem de script usada principalmente para desen-
volvimento web. Funções em PHP podem ser definidas e chamadas de forma
semelhante a C++, mas são frequentemente usadas para manipular páginas da web
e interagir com bancos de dados.
- Em PHP, você pode definir funções globais e funções de classe (méto-
dos) em classes definidas pelo usuário. C++ também suporta funções glo-
bais e funções de classe.