🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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`中,并将相应的文本打印到屏幕上。 * * * ## 哪种方法更好? 上面所有四个程序都提供相同的输出,并且在技术上都是正确的程序。 对于选择哪种方法没有严格的规定。 根据具体情况以及您要如何解决问题来选择特定的方法。