static关键字其实一点也不安静

static关键字在编程中非常容易混淆,因为它用于不同的“上下文环境”有不同的作用和意思,现在我们来吧static关键字进行一个总结,希望能对看到这篇文章的人能有所帮助。


C语言中static关键字主要有以下作用:

1、修饰变量:

          static可以修饰全局变量和局部变量。它们都存储在静态区当中。

a、静态全局变量:

      static修饰的全部变量称为静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它,也就是说静态全局变量不具有外部链接属性。

</pre>例如:<pre name="code" class="cpp">//test_8_16.cpp
#include <iostream>

using namespace std;

static int count;
#include "test_8_16.cpp"


int main()
{
	std::cout << count << endl;
	return 0;
}

在test_8_16.cpp文件中定义了一个静态全部变量 count,并在另一个文件中包含了test_8_16的cpp文件,当我在这个文件中使用count时,编译器报出以下错误

b、静态局部变量:

     静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。


2、修饰函数

     修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。


3、在C++中,修饰类的成员变量

     在C++中,用static修饰的类的成员变量称为类的静态成员,类的静态成员只与类本身相关而不与类的各个对象产生关联,并且类的静态成员尽管在类中有申明,但它存在于任何对象之外,对象中不会包含任何与静态成员有关的数据,又由于类的静态成员变量和方法不与任何对象绑定在一起,所以静态成员函数不包含this指针,同时静态成员函数也不能声明为const类型的。

使用类的成员变量:

 可以使用作用域运算符和类型来直接访问类的静态静态成员:

class  Date
{
public:
	Date()
	{
		cout << "Date ()" << endl;
		++sCount;
	}
	void  Display()
	{
		cout << "year:" << _year << endl;
		cout << "month:" << _month << endl;
		cout << "day:" << _day << endl;
	}
	//  静态成员函数
	static void  PrintCount()                //静态成员函数只能访问静态成员
	{
		cout << "Date count:" << sCount << endl;

	}
private:
	int Return_count()
	{
		return 0;
	}
private:
	int  _year;      //  年
	int  _month;     //  月
	int  _day;       //  日
private:
	static  int  sCount ;  //  静态成员变量,统计创建时间个数
	static  int Initcount();
	static Date date;      //  可以再一个类中,用该类的类型来声明一个静态成员变量
	//不完全类型:   有声明,却没有定义的类型
	//Date date1;
	Date* date1;
};
在上面的程序中我们定义了类的静态成员变量 sCount和类的静态成员函数Initcount( )。由于静态成员变量不关联任何对象,只与类本省相关。所以对象的生命周期包含在静态成员变量的生命周期中,所以我们可以用sCount来统计Date类对象的创建个数。同时我们还应该注意,静态成员在类中只能是声明,不能是定义,要在类外去定义静态成员变量。

Date类的静态成员变量和函数定义如下:

int Date::Initcount()
{
	return 0;
}
//  定义并初始化静态成员变量
int  Date::sCount =Initcount();             //注:   静态成员变量必须在类外进行初始化  在类中只能是声明



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值