static关键字

静态局部变量 静态函数

static局部变量分配于静态存储区(初始化分配于data区,未初始化分配于BSS区)。
在函数体内定义的static变量的作用范围为该函数体,函数调用完成之后不释放。
静态局部变量和普通局部变量的作用域是一样的,都是针对局部使用,在函数外不能使用。
但是生存期不同,静态局部变量的生存期为整个程序运行期间。

static修饰全局变量或函数时,表示本地性。
static全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。
static函数表示该函数只能在本源文件进行调用,其他文件或模块不能调用。
这里static作用只是限定了作用域(仅限于本文件)。这样的话模块开发时不同源文件下的static函数可以同名。
对于全局变量而言,无论是否有static修饰,其存储区域都是全局数据区,生命周期都是全局的。

初始化:全局变量(含static全局变量)的初始化是在main函数运行之前。函数内部的静态局部变量的初始化是在函数第一次调用时执行。

静态成员变量 静态成员函数

静态成员变量是类的成员变量,是类的所有对象中共享的成员,通常用于表示全局性质的数据,比如计数器、标识符等。
静态成员函数是类的成员函数,可以直接通过类名调用。静态成员函数通常用于执行全局性质的操作,比如工厂函数、单例模式等。
静态成员变量必须初始化且要在实现中进行,不能在头文件进行。

静态成员变量或静态成员函数,表示该变量或函数属于类,不属于该类的实例对象,是该类的所有对象共用。由于变量和函数对于此类的唯一性,可以用类名直接引用。
静态成员函数不与对象相联系,因此不具有this指针,无法访问类对象的非静态数据成员,也无法访问非静态成员函数,只能调用静态成员函数。普通成员函数可访问静态成员变量、也可以访问非经常成员变量。

#include <stdlib.h>
#include <iostream>
using namespace std;

class StaticTest
{
public:
	StaticTest(int a, int b);
	void GetSum();
	static void f1(StaticTest &s);
private:
	int A, B;
	static int Sum;
};

int StaticTest::Sum = 0;//静态成员在此初始化

StaticTest::StaticTest(int a, int b) {
	A = a; B = b;
	Sum += A + B;
}
void StaticTest::GetSum() {
	cout << "Sum = " << Sum << endl;
}

//静态方法不能直接调用非晶态成员,可以通过对象引用实现调用
void StaticTest::f1(StaticTest &s)
{
	cout << s.A << endl;
	cout << Sum << endl;
}

int main(void)
{
	StaticTest M(3, 7), N(14, 9);
	M.GetSum();
	N.GetSum();
	StaticTest::f1(M);
	return 0;
}
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春夏与冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值