C++关键字static

1、static可以把变量和函数限定在本文件中

用static修饰的变量或者函数,只能在本文件中有效,不能在其他文件中使用。

例如一个文件file.h中定义变量

extern int test=10;


在main.cpp中使用它,那么可以使用关键字extern

#include<iostream>
#include"file.h"
int main()
{
	 extern int test;

	std::cout<<test<<std::endl;
}


如果使用了关键字static修饰,那么在main.cpp中使用就会出错。

这样做的好处就是不同的开发人员使用相同名字的变量或者函数,如果加上关键字static修饰,那么在程序合在一起时就不会出现变量重复定义的问题。

2、static修饰的变量存储在静态存储区,在定义时初始化,并且只初始化一次,默认初始化为0

例如统计一个函数调用的次数,如果使用全局变量,那么就不能控制变量的可见范围,这时可以使用static变量

#include<iostream>
void fun()
{
	static int count=0;//实际这一行并不运行,在编译时就确定了static变量的值
	count++;
	std::cout<<count<<std::endl;
}
int main()
{
	fun();

	fun();
}


3、类的静态成员和类的静态函数

在类中定义的静态成员,独立于类的实例化对象而存在,不属于某一个对象。static数据成员在类定义体外初始化,不能通过构造函数初始化。

#include<iostream>

class A{
private:
	static int count;
public:
	void print()
	{
		std::cout<<count<<std::endl;
		count--;
	}
};
int A::count=10;
int main()
{
	A test1,test2;
	test1.print();

	test2.print();
	return 0;
}


这段代码输出:

10

9

static成员函数。因为static成员函数只是属于类的组成部分,因此它没有this指针,因此static成员函数不能声明为const。它也不能声明为虚函数。

因为没有this指针,static成员函数只能访问类的static成员,不能访问非static成员,但是非static成员函数可以访问static成员变量。

static成员函数可以通过对象调用,也可以通过类名::函数名方式调用。


#include<iostream>

class A{
private:
	static int count;
public:
	 static void print()
	{
		std::cout<<count<<std::endl;
		count--;
	}
};
int A::count=10;
int main()
{
	A test;
	test.print();

	A::print();

	return 0;
}

这段代码输出:

10

9


另外,static成员可以被继承,static成员也遵循常规访问控制。但是在继承层次中只有一个实例,无论基类派生出多少个派生类,每个static成员其实都只有一个实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值