C和C++中static作用详解

C中static的作用大致三种:

首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。

分开来说:

(1)隐藏。这点主要针对静态全局变量和静态函数。对于非静态全局变量的作用域是整个源程序(可能包含多个文件),而静态全局变量则将其作用域限定在本文件内。同理,静态函数也将其作用域限定在本文件内。利用static实现了变量名和函数名的隐藏,从而其他文件内可以有同名函数或变量而不互相影响。static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。

(2)持久性。主要针对静态局部变量,把局部变量改变为静态变量后,存储到静态存储区,即改变了它的生存期,作用域不变。static局部变量只被初始化一次。

(3)默认初始化为0。因为全局变量本来默认初始化为0,所以主要针对静态局部变量。

 

C++中static作用:

除了在面向过程设计中兼容C中特性外,C++中增加的含义体现在面向对象程序设计时,此时static表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。具体的情况为:

(1)类的静态成员变量

在cpp中必须对它进行初始化,如

int Myclass::sum = 0;   //初始化静态数据成员,注意该处没有static

如果变量被声明为static,对象将只在执行线程第一次到达它的定义并初始化。

//oop.h
#include<iostream>
using namespace std;

class Myclass
{
private:
	int a , b , c;
	static int sum;  //声明静态数据成员
public:
	Myclass(int a , int b , int c);
	void GetSum();
};
//oop.cpp
#include "oop.h"
int Myclass::sum = 0;   //定义并初始化静态数据成员

Myclass::Myclass(int a , int b , int c)
{
	this->a = a;
	this->b = b;
	this->c = c;
	sum += a+b+c;
}
void Myclass::GetSum()
{
	cout<<"sum="<<sum<<endl;
}

int main(void)
{
	Myclass M(1 , 2 , 3);
	M.GetSum();
	Myclass N(4 , 5 , 6);
	N.GetSum();
	M.GetSum();
	getchar();
	return 0;
}

输出为:6 21 21

(2)类的静态函数
实现的时候也不需要static的修饰;类的静态函数是在该类的范畴内的全局函数,只能访问类的静态成员(变量和函数),不需要类的实例即可调用;实际上,它就是增加了类的访问权限的全局函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值