一:题目
二:代码
前提:
A:静态成员和静态函数的性质
①:非内部类法
class A
{
public:
A()
{
sum+=i;
i+=1;
}
static int Getsum()
{
return sum;
}
private:
static int sum;
static int i;
};
int A::i = 1;
int A::sum = 0;
class Solution {
public:
int Sum_Solution(int n)
{
A arr[n];
return A::Getsum();
}
};
解释 :
a:在Solutoin这个类中创建了一个n个类A对象的数组
b:在A的构造函数中进行sum+=i,i+=i(sum是和,i是1到n的遍历),调用n次构造,得到的就是我们要的1+到n
c:因为A中的成员变量是私有的,所以我们在Solutoin类中的函数中无法return A::sum来获取,而是在A中构建一个静态成员函数来获取sum,此时Solutoin中return A::Getsum()即可
Q:为什么函数要static,为什么函数就能获取到私有的sum?
A:能获取到私有的sum是因为这函数是A类的成员函数,所以可以访问到本A类的成员变量,无论是私有共有;而至于函数为什么要static,是因为静态函数没有隐藏的this指针,我们在Sulotion类中可以直接调用,而不需要创建一个类A 的对象,才去访问(而且创建类A的对象还会影响sum)
A中成员变量是公有的写法:
class A
{
public:
A()
{
sum+=i;
i+=1;
}
public:
static int sum;
static int i;
};
int A::i = 1;
int A::sum = 0;
class Solution {
public:
int Sum_Solution(int n)
{
A arr[n];
return A::sum;
}
};
解释:
a:因为是公有,所以直接return A::sum;即可,Getsum函数也不需要了
②:内部类法
class Solution {
public:
class A
{
public:
A()
{
sum+=i;
i+=1;
}
};
int Sum_Solution(int n)
{
A arr[n];
return sum;
}
private:
static int sum;
static int i;
};
int Solution::sum=0;
int Solution::i=1;
解释:
a:和非内部类法是一样的思路,更方便的地方在于,我们的static是Solution类的成员变量,所以当内部类A最后得到sum时,我们直接return sum即可(无论公有私有)
如果你想把两个静态变量作为A的成员变量,也可以:
class Solution {
public:
class A
{
public:
A()
{
sum+=i;
i+=1;
}
static int Getsum()
{
return sum;
}
private:
static int sum;
static int i;
};
int Sum_Solution(int n)
{
A arr[n];
return A::Getsum();
}
};
int Solution::A::sum=0;
int Solution::A::i=1;
解释 :
a:麻烦的地方在于,在最外部的定义的时候,需要解两层域(Solution::A::)
b:其次我们一般成员变量都是私有的,所以我们想获得A的私有静态变量sum,也是要在A中写一个函数来获取
如果类A的成员变量是公有的:
class Solution {
public:
class A
{
public:
A()
{
sum+=i;
i+=1;
}
public:
static int sum;
static int i;
};
int Sum_Solution(int n)
{
A arr[n];
return A::sum;
}
};
int Solution::A::sum=0;
int Solution::A::i=1;
解释:
a:不用写静态函数了,Solution中直接return A::sum即可