个人主页:Jason_from_China-CSDN博客
所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客
所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客
概念概述
- 用 static 修饰的成员变量,称之为静态成员变量,静态成员变量一定要在类里面生命,在类外进行初始化。
- 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。
- 用 static 修饰的成员函数,称之为静态成员函数,静态成员函数没有 this 指针。
- 静态成员函数中可以访问其他的静态成员,但是不能访问非静态的,因为没有 this 指针。
- 非静态的成员函数,可以访问任意的静态成员变量和静态成员函数。
- 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量和静态成员函数。
- 静态成员也是类的成员,受 public、protected、private 访问限定符的限制。
- 静态成员变量不能在声明位置给缺省值初始化,因为缺省值是个构造函数初始化列表的,静态成员变量不属于某个对象,不走构造函数初始化列表。
static的使用1:
- 静态成员函数的使用是很结合构造和析构的,静态成员函数是可以直接突破类域来访问静态成员函数
- 不是静态成员函数就不能突破类域直接访问,我们需要创建一个对象,利用对象访问成员函数
- 如果不设置静态成员函数,那么你需要访问成员变量,就需要创建一个对象才能访问成员函数,从而导致麻烦。所以我们可以直接设置为静态成员函数。
- 这里有一个注意事项,就是不是静态成员变量,不能用静态成员函数访问,不然会导致报错
static的使用2:
这里我使用vs编译器,vs编译器不支持可边长数组,所以代码有点不一样
#include<iostream> using namespace std; //求1+2......+n//不能使用乘除 class sum { public:sum(){_ret += _i;++_i;}//获取ret最终的结果static int _GetRet(){return _ret;} private:static int _i;static int _ret; }; int sum::_i = 1; int sum::_ret = 0;class solution { public:int _solution(int n){for (int i = 0; i < n; i++){//创建n次构造函数,n次构造函数++会依次递加sum s;}//创建n次数之后,我们计算出来数值,此时我们可以选择数值来进行接收int ret = sum::_GetRet();//打印数值cout << ret << endl;//返回数值return sum::_GetRet();} };int main() {solution s;int ret = s._solution(100);//这里接收进行验证,发现是正确的cout << ret << endl;//打印出来return 0; }
类
sum
成员变量:
static int _i
:静态成员变量,用于记录当前要累加的数字。初始化为 1。static int _ret
:静态成员变量,用于存储累加的结果。初始化为 0。构造函数:
- 每次创建
sum
类的对象时,构造函数被调用。在构造函数中,将当前的_i
值累加到_ret
中,然后将_i
的值自增。这样,每次创建对象就相当于进行一次累加操作。静态成员函数
_GetRet()
:
- 用于获取
_ret
的值,即累加的结果。类
solution
- 成员函数
_solution(int n)
:
- 这个函数接受一个整数
n
,目的是计算从 1 加到n
的和。- 通过一个循环创建
n
次sum
类的对象。每次创建对象时,sum
类的构造函数会自动进行累加操作。- 最后,通过
sum::_GetRet()
获取累加的结果,并将其赋值给ret
,然后打印和返回这个结果。
static的使用3:
构造函数:C是全局变量先进行构造,其次就是局部变量依次进行构造
析构函数:先析构局部变量,先构造的后析构,所以先析构B,其次是A,最后是D,全局变量生命周期伴随函数的结束