猿问

如题,目的是输入n求1+2+3+...+n,但是不明白为什么要加static,为什么去除之后会出错


typedef int (*func)( int );
class Solution {
public:
    static int Solution1(int n )
        { return 0;}
 
    static int Sum_Solution(int n) {
        static func f[2] = {Solution1,Sum_Solution};
        return n+f[!!n](n-1);
    }  

};

1如果有空的话能解释的详细一点就好了


云爆雷声
浏览 995回答 1
1回答

onemoo

这个代码的思路是利用递归来计算。其实只需要 int Solution1(int n) 和 int Sum_Solution(int n) 这两个函数就够了。可是这代码非要把函数包装进 Solution 类,这两个函数就作为成员函数。如果把它们声明为普通成员函数(没有static),那么想要调用这两个函数就必须先实例化一个 Solution 对象。原本 Solution 类存在的意义仅仅是包装下两个函数而已,没有必要为使用这两个函数来实例化 Solution 对象。所以通常的解决办法就是把它们声明为 static 成员,这样只要通过 Solution 名就可以调用这两个函数了,不需要先实例化 Solution。比如这样调用:Solution::Sum_Solution(100);附带一个原因就是:代码中利用了函数指针,普通的函数指针只能指向 static 成员函数,所以这两个函数也不能是普通成员函数。总之,代码中必须有这几个 static 完全是因为这两个函数被包装成了类的成员函数。除非有要求必须把函数包装到 Solution 类中(有的刷题测试系统有要求),不然根本没必要用到这个类。
随时随地看视频慕课网APP
我要回答