为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
云爆雷声 2018-05-13 12:52:07
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 类中(有的刷题测试系统有要求),不然根本没必要用到这个类。

查看完整回答
反对 回复 2018-05-22
  • 1 回答
  • 0 关注
  • 994 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信