English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

c++ Tipos de funções definidas pelo usuário

Neste tutorial, você aprenderá a usar funções para resolver diferentes métodos de um único problema.

Para entender melhor os parâmetros e o valor de retorno das funções, pode-se classificar as funções definidas pelo usuário como:

Considere uma situação em que você deve verificar números primos. Através do seguinte4Diferentes maneiras de criar funções definidas pelo usuário podem resolver os seguintes problemas.

Exemplo1: Não passa de parâmetros, nem tem valor de retorno

#include <iostream>
using namespace std;
void prime();
int main()
{
    // Nenhum parâmetro é passado para o prime()
    prime();
    return 0;
}
// O tipo de retorno da função é void, porque não há valor de retorno.
void prime();
{
    int num, i, flag = 0;
    cout << "Digite um número inteiro positivo para verificar: ";
    cin >> num;
    for(i = 2; i <= num/2; ++i)
    {
        if (num % i == 0)
        {
            flag = 1; 
            break;
        }
    }
    if (flag == 1)
    {
        cout << num << " ". Não é um número primo.";
    }
    else
    {
        cout << num << " é um número primo.";
    }
}

No programa acima, a função prime() é chamada dentro de main(), mas sem parâmetros.

A função prime() é usada para obter um número positivo do usuário e verificar se o número é primo.

Como o tipo de retorno do prime() é void, a função não retorna nenhum valor.

Exemplo2: Não passa de parâmetros, mas tem valor de retorno

#include <iostream>
using namespace std;
int prime();
int main()
{
    int num, i, flag = 0;
    // Nenhum parâmetro é passado para o prime()
    num = prime();
    for (i = 2; i <= num/2; ++i)
    {
        if (num % i == 0)
        {
            flag = 1;
            break;
        }
    }
    if (flag == 1)
    {
        cout << num << " não é um número primo.";
    }
    else
    {
        cout << num << " é um número primo.";
    }
    return 0;
}
// O tipo de retorno da função é int
int prime()
{
    int n;
    printf("Digite um número inteiro positivo para verificar: ");
    cin >> n;
    return n;
}

No programa acima, chamamos a função prime() a partir do main(), sem parâmetros.

A função prime() obtém um número inteiro positivo do usuário. Como o tipo de retorno da função é int, ela retorna o número digitado para a função main().

Então, dentro do próprio main(), verificamos se o número é primo e imprimimos na tela.

Exemplo3:parâmetros passados mas sem valor de retorno

#include <iostream>
using namespace std;
void prime(int n);
int main()
{
    int num;
    cout << "Digite um número inteiro positivo para verificar: ";
    cin >> num;
    
    // O parâmetro num é passado para a função prime().
    prime(num);
    return 0;
}
// A chamada da função não tem valor de retorno. Portanto, o tipo de retorno da função é void. */
void prime(int n)
{
    int i, flag = 0;
    for (i = 2; i <= n/2; ++i)
    {
        if (n % i == 0)
        {
            flag = 1;
            break;
        }
    }
    if (flag == 1)
    {
        cout << n << " ". Não é um número primo.";
    }
    else {
        cout << n << " ". É um número primo.";
    }
}

No programa acima, primeiro pedimos ao usuário que insira um número inteiro positivo, que é armazenado na variável num.

Então, passamos num para a função prime(), onde verificamos e imprimimos se o número é primo.

Porque, o tipo de retorno da função prime() é void, a função prime() não retorna nenhum valor.

Exemplo4:parâmetros passados e valores de retorno.

#include <iostream>
using namespace std;
int prime(int n);
int main()
{
    int num, flag = 0;
    cout << "Digite um número inteiro positivo para verificar: ";
    cin >> num;
    // O parâmetro num é passado para a função check().
    flag = prime(num);
    if(flag == 1)
        cout << num << " ". Não é um número primo.";
    else
        cout << num << " ". É um número primo.";
    return 0;
}
/* Esta função retorna um valor inteiro. */
int prime(int n)
{
    int i;
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }
    return 0;
}

No programa acima, perguntamos ao usuário um número inteiro positivo e o armazenamos na variável num.

Em seguida, o num é passado para a função prime(), onde é verificado se o número é primo.

Como o tipo de retorno de prime() é int, então1Ou 0 é retornado para a chamada da função main(). Se o número for primo, retorna1Se não, retorna 0.

No função main(), o valor retornado1Ou 0 é armazenado na variável flag e o texto correspondente é impresso na tela.

Qual método é melhor?

Os quatro programas acima fornecem o mesmo resultado de saída e tecnicamente são programas corretos.

Não há especificação rigorosa para a escolha do método.

Escolha o método específico com base na situação específica e na maneira como você deseja resolver o problema.