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如果有空的话能解释的详细一点就好了
1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
这个代码的思路是利用递归来计算。其实只需要 int Solution1(int n) 和 int Sum_Solution(int n) 这两个函数就够了。
可是这代码非要把函数包装进 Solution 类,这两个函数就作为成员函数。
如果把它们声明为普通成员函数(没有static),那么想要调用这两个函数就必须先实例化一个 Solution 对象。原本 Solution 类存在的意义仅仅是包装下两个函数而已,没有必要为使用这两个函数来实例化 Solution 对象。
所以通常的解决办法就是把它们声明为 static 成员,这样只要通过 Solution 名就可以调用这两个函数了,不需要先实例化 Solution。比如这样调用:Solution::Sum_Solution(100);
附带一个原因就是:代码中利用了函数指针,普通的函数指针只能指向 static 成员函数,所以这两个函数也不能是普通成员函数。
总之,代码中必须有这几个 static 完全是因为这两个函数被包装成了类的成员函数。
除非有要求必须把函数包装到 Solution 类中(有的刷题测试系统有要求),不然根本没必要用到这个类。
- 1 回答
- 0 关注
- 988 浏览
添加回答
举报
0/150
提交
取消