静态成员:
一.定义:
由static修饰的成员变量叫做静态成员变量,类似地,由static修饰的成员函数,就叫做静态成员函数。
二.理解:
三:个人关于知识点的领悟:
@静态变量只能在类外进行初始化,不能在定义的时候给缺省值,因为静态变量不走初始化列表初始化,要用类型 类名::变量名 = n 这样的方式在类外面进行初始化
@静态的只能访问静态的,非静态的既可以访问静态的,也可以访问非静态的。这点跟java 中的类似。(因为静态函数中没有this指针,就不能访问非静态的变量和方法)
@静态成员属于类,但是不属于对象,这一点可以通过sizeof来验证
@突破类域就能访问静态成员,例如:类名::静态成员 或者 对象.静态成员
@静态变量虽然不属于对象,但是他受到类中的访问限制符的限制:public protect private
四.关于静态成员的应用:
例如以下的oj题中:叫求1到n的和,就可以用到静态的成员变量;
解法 :
class sum{
private:
static int _n;
static int _result;
public:
sum(){
_n++;
_result+= _n;
}
static int getresult(){
return _result ;
}
};
int sum:: _n =0;
int sum::_result = 0;
class Solution {
public:
int Sum_Solution(int n) {
sum a[n];
return sum::getresult();
}
};
解题思路:
1.创建一个sum类。然后定义两个静态的变量_n 和_result,然后对两个进行初始化,在构造方法中进行_n++和_result+=n;
2.创建sum a[n]对象数组,每创建一个对象就调用一次构造方法,就对静态的成员变量完成++,则创建n个对象就完成了1+2+3+........+n的操作
3.最后再返回得到的result就完成了这道题
内部类
一.定义:
在一个类中定义一个类,就叫做内部类
二.理解:
@内部类是独立的,他跟外部的类没有太大的关系,他可以独立的创建自己的对象,即使外部的类没有实例化。
@内部类是外部类的友元类,但是外部类不是内部类的友元类,即是说内部类可以访问外部类的所有的成员,但是外部类不能直接访问内部类的成员,除非有特殊的接口。
@在下斗胆认为:内部类和外部类的关系有点像人与寄生虫的关系,寄生虫可以访问人体的各个东西,但是人却不能直接访问寄生虫的东西,除非有特殊的的接口。
@虽然他是的独立的,但是他受到外部类中的访问修饰符的限制。
@作用域:内部类的作用域仅限于其外部类。在类外部,必须通过外部类的实例来引用内部类。
三.例子:
可以对上面的代码进行优化,采用内部类的方式:只需要将静态的变量的类域改变一下即可。
class Solution {
class sum {
private:
static int _n;
static int _result;
public:
sum() {
_n++;
_result += _n;
}
static int getresult() {
return _result ;
}
};
public:
int Sum_Solution(int n) {
sum a[n];
return sum::getresult();
}
};
int Solution::sum:: _n = 0;
int Solution::sum::_result = 0;