因此不能使用等差求和(禁掉位运算为了禁掉等差求和,右移一位就是等差除二)、循环、递归来解决
我们运用到在
统计构造次数所学到的内容:
1.可以利用静态全局变量的思想来做
2.构造n次对象,可以创建一个具有n个同类型对象的数组
class Sum{
public:
Sum()
{
_ret+=_i;
++_i;
}
static int GetRet()
{
return _ret;
}
private:
static int _i;
static int _ret;
};
int Sum::_i = 1;
int Sum::_ret = 0;
class Solution {
public:
int Sum_Solution(int n) {
//构造n个对象
//创建一个数组,内有n个数据
Sum a[n];
return Sum::GetRet();
}
};
这样便解决问题:
我们还可以运用到:使用内部类(因为Sum类本身就只给Solution类使用,不希望其他访问到Sum类):
class Solution {
public:
class Sum{
public:
Sum()
{
_ret+=_i;
++_i;
}
static int GetRet()
{
return _ret;
}
private:
static int _i;
static int _ret;
};
int Sum_Solution(int n) {
//构造n个对象
//创建一个数组,内有n个数据
Sum a[n];
return Sum::GetRet();
}
};
int Solution::Sum::_i = 1;
int Solution::Sum::_ret = 0;
还可以再优化:
将内部所定义的变量直接在外部类定义,这样就不用再写Get函数
class Solution {
public:
class Sum{
public:
Sum()
{
_ret+=_i;
++_i;
}
};
int Sum_Solution(int n) {
//构造n个对象
//创建一个数组,内有n个数据
Sum a[n];
return _ret;
}
private:
static int _i;
static int _ret;
};
int Solution::_i = 1;
int Solution::_ret = 0;
Sum 类天生是Solution类的友元类,资源共享