C++中main函数怎样调用类内函数

 更新时间:2023年08月02日 09:42:20   作者:木木子v  
这篇文章主要介绍了C++中main函数怎样调用类内函数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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函数不管是自身的调用还是被其他函数调用,都要设置函数终止的条件,这个递归函数有点相似,不然就会陷入死循环。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C++二分查找(折半查找)算法实例详解

    C++二分查找(折半查找)算法实例详解

    这篇文章主要介绍了C++二分查找(折半查找)算法,结合实例形式详细分析了二分查找算法的原理、思想、实现方法与相关操作技巧,需要的朋友可以参考下
    2017-05-05
  • 深入解析C++编程中线程池的使用

    深入解析C++编程中线程池的使用

    这篇文章主要介绍了深入解析C++编程中线程池的使用,包括线程池的封装实现等内容,需要的朋友可以参考下
    2015-11-11
  • C语言实题讲解快速掌握单链表上

    C语言实题讲解快速掌握单链表上

    单链表是后面要学的双链表以及循环链表的基础,要想继续深入了解数据结构以及C语言,我们就要奠定好这块基石!接下来就和我一起学习吧
    2022-04-04
  • 详解Matlab中自带的Java操作合集

    详解Matlab中自带的Java操作合集

    其实Matlab中也有一些自带的Java操作,例如:获取鼠标在全屏位置、获取当前剪切板内容、获取鼠标处像素颜色等,本文总结了七个这样的操作,感兴趣的可以了解一下
    2022-03-03
  • C语言实现打印数字金字塔

    C语言实现打印数字金字塔

    这篇文章主要介绍了C语言实现打印数字金字塔方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++广播通信实例

    C++广播通信实例

    这篇文章主要介绍了C++实现广播通信的方法,实例讲述了C++ socket广播通信的原理与实现方法,需要的朋友可以参考下
    2014-10-10
  • wxWidgets实现无标题栏窗口拖动效果

    wxWidgets实现无标题栏窗口拖动效果

    这篇文章主要为大家详细介绍了wxWidgets实现无标题栏窗口拖动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • 基于Matlab实现人工神经网络(ANN)回归的示例详解

    基于Matlab实现人工神经网络(ANN)回归的示例详解

    这篇文章主要为大家详细介绍了Matlab实现人工神经网络(ANN)回归的相关资料,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-02-02
  • C语言深入刨析数据结构之栈与链栈的设计与应用

    C语言深入刨析数据结构之栈与链栈的设计与应用

    栈是限定仅在表尾进行插入或删除操作的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。栈的最主要特点就是“先进后出”(FILO),或“后进先出”(LIFO)。用链式存储结构表示的栈称为“链栈”,链栈对应于链表
    2022-05-05
  • c++ chrono 获取当前时间的实现代码

    c++ chrono 获取当前时间的实现代码

    这篇文章主要介绍了c++ chrono 获取当前时间的实现代码,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07

最新评论