# C++ 中用户定义函数的类型

> 原文： [https://www.programiz.com/cpp-programming/user-defined-function-types](https://www.programiz.com/cpp-programming/user-defined-function-types)

#### 在本教程中，您将学习使用函数来解决单个问题的不同方法。

为了更好地理解参数和函数返回，可以将用户定义的函数归类为：

*   [没有参数且没有返回值的函数](#no_argument_no_return)
*   [没有参数但返回值的函数](#no_argument_yes_return)
*   [有参数但没有返回值的函数](#yes_argument_no_return)
*   [具有参数和返回值的函数](#yes_argument_yes_return)

考虑一种情况，您必须检查质数。 通过以上述 4 种不同的方式制作用户定义的函数，可以解决以下问题。

* * *

## 示例 1：没有传递参数，也没有返回值

```cpp
# include <iostream>
using namespace std;

void prime();

int main()
{
    // No argument is passed to prime()
    prime();
    return 0;
}

// Return type of function is void because value is not returned.
void prime()
{

    int num, i, flag = 0;

    cout << "Enter a positive integer enter to check: ";
    cin >> num;

    for(i = 2; i <= num/2; ++i)
    {
        if(num % i == 0)
        {
            flag = 1; 
            break;
        }
    }

    if (flag == 1)
    {
        cout << num << " is not a prime number.";
    }
    else
    {
        cout << num << " is a prime number.";
    }
} 
```

在上述程序中，不带参数的情况下，从`main()`调用`prime()`。

`prime()`从用户处获取正数，并检查该数字是否为质数。

由于`prime()`的返回类型为`void`，因此该函数不返回任何值。

* * *

## 示例 2：未传递任何参数，但返回值

```cpp
#include <iostream>
using namespace std;

int prime();

int main()
{
    int num, i, flag = 0;

    // No argument is passed to prime()
    num = prime();
    for (i = 2; i <= num/2; ++i)
    {
        if (num%i == 0)
        {
            flag = 1;
            break;
        }
    }

    if (flag == 1)
    {
        cout<<num<<" is not a prime number.";
    }
    else
    {
        cout<<num<<" is a prime number.";
    }
    return 0;
}

// Return type of function is int
int prime()
{
    int n;

    printf("Enter a positive integer to check: ");
    cin >> n;

    return n;
}
```

在上述程序中，不带参数地从`main()`调用`prime()`函数。

`prime()`从用户处获取一个正整数。 由于该函数的返回类型为`int`，因此它将用户输入的数字返回给调用`main()`函数。

然后，在`main()`本身中检查数字是否为质数并打印到屏幕上。

* * *

## 示例 3：传递参数但没有返回值

```cpp
#include <iostream>
using namespace std;

void prime(int n);

int main()
{
    int num;
    cout << "Enter a positive integer to check: ";
    cin >> num;

    // Argument num is passed to the function prime()
    prime(num);
    return 0;
}

// There is no return value to calling function. Hence, return type of function is 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 << " is not a prime number.";
    }
    else {
        cout << n << " is a prime number.";
    }
}
```

在上述程序中，首先向用户询问正数，该正数存储在变量`num`中。

然后，将`num`传递给`prime()`函数，在此函数中检查并打印数字是否为质数。

由于`prime()`的返回类型为`void`，因此该函数不返回任何值。

* * *

## 示例 4：传递参数并具有返回值

```cpp
#include <iostream>
using namespace std;

int prime(int n);

int main()
{
    int num, flag = 0;
    cout << "Enter positive integer to check: ";
    cin >> num;

    // Argument num is passed to check() function
    flag = prime(num);

    if(flag == 1)
        cout << num << " is not a prime number.";
    else
        cout<< num << " is a prime number.";
    return 0;
}

/* This function returns integer value.  */
int prime(int n)
{
    int i;
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
            return 1;
    }

    return 0;
} 
```

在上述程序中，向用户询问一个正整数并将其存储在变量`num`中。

然后，将`num`传递到函数`prime()`，在其中检查数字是否为质数。

由于`prime()`的返回类型是`int`，因此将 1 或 0 返回到`main()`调用函数。 如果数字是质数，则返回 1。 如果不是，则返回 0。

返回`main()`函数，返回的 1 或 0 存储在变量`flag`中，并将相应的文本打印到屏幕上。

* * *

## 哪种方法更好？

上面所有四个程序都提供相同的输出，并且在技术上都是正确的程序。

对于选择哪种方法没有严格的规定。

根据具体情况以及您要如何解决问题来选择特定的方法。