C++中main函数怎样调用类内函数
作者:木木子v
C++中main函数调用类内函数
以力扣209题为例
#include <iostream> #include<vector> using namespace std; class minimum_size_subarray_sum { public: static int minSubArrayLen(int target, vector<int> &nums) { int i = 0; int result = INT32_MAX; int sum = 0; int subLength = 0; for(int j = 0; j < nums.size(); j++) { sum = sum + nums[j]; while(sum >= target) { subLength = j - i + 1; result = result < subLength ? result : subLength; sum = sum - nums[i]; i++; } } return result == INT32_MAX ? 0 : result; } }; int main() { vector<int> nums; nums.push_back(2); nums.push_back(3); nums.push_back(1); nums.push_back(2); nums.push_back(3); nums.push_back(4); int target = 7; int result = minimum_size_subarray_sum::minSubArrayLen(target, nums); cout << result << endl; return 0; }
将类内函数设置为静态static,就可以直接调用了,另外,在调用时要加上类名。
另外,补充:在C++中,“::”表示作用域,::前面是类名,后面是该类的成员名称,C++为避免不同的类有名称相同的成员而采用作用域的方式进行区分。
C++ main函数的调用与被调用
main函数能调用自身吗?
其他函数能调用main函数么?
下面先看一段有意思的程序,一个简洁有趣的打印菱形的程序。
int line = 1; int main() { printf("%*s\n",7-(line>4?line-4:4-line), "*******"+2*(line>4?line-4:4-line)); if(++line !=8) main(); return 0; }
效果图如下:
首先说一下”%*s”的用法,即*是用一个int参数来代替,比如:
printf(“%*s\n”, 5, “def”);就相当于printf(“%5s\n”, “def”);指定了字符串输出的宽度。这个用法平时见得不多,可以了解下。
另外:有人对这一行“*******”+2*(line>4? line-4:4-line)感到疑惑,其实认真看一下,就是一个字符串指针加上一个int整数,也就是指针的平移了。比如line=1第一行时,2*(line>4? line-4:4-line)即为6,也就是7个星号的字符串指针平移6个,所以输出一个星号了。最后这个程序用到了main函数的递归调用,注意一定要写上退出条件,否则就无限循环了。
这里分享下*在scanf中的作用是跳过...
例如:
scanf("%*d %*d %d",&n); printf("%d",n);
这样当输入 1 2 3的时候,只会存储n,正常打印3
再啰嗦一下*在printf("%*d",width,n);这样因为是*d 的顺序,所以width实际表达的是 n的输出宽度,n才是要输出的内容。
例如:
int n=3; scanf("%d",width); printf("%*d",width,n);
下面看一下其他函数调用main的例子,打印(空格):
int line = 1; int func(); int main() { printf("%d ",line); line++; if(line<=9) main(); func(); return 0; }; int func() { if(line<=13) { line++; main(); } return 0; }
运行结果如下:
事实证明main函数只是一个程序的入口,也相当于一个普通的函数,也能被自身调用,也能被其他函数调用。
这和一般的函数之间互相调用的概念是一样的。不过需要注意的是,main函数不管是自身的调用还是被其他函数调用,都要设置函数终止的条件,这个递归函数有点相似,不然就会陷入死循环。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。