码迷,mamicode.com
首页 > 其他好文 > 详细

一次性解决static关键字

时间:2014-11-19 16:10:03      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   color   os   使用   sp   文件   on   

static关键字的用法:

1:static局部变量的特点:

a):地址在全局区

b):只有在第一次进入函数的时候初始化

c):生命期在离开main函数之后结束

d):每次进入函数后不会重新进行初始化,保留进入函数之前的初值。

void func()
{
	static int n = 6;//static静态局部变量只在第一次调用该函数时初始化一次,后面调用不会再进行初始化。
	n = n + 10;
	cout<<n<<endl;
}

int main(int argc, char* argv[])
{

	int i  =0;
	while(i< 4)
	{
		func();
		i++;
	}

	return 0;
}

static局部变量主要是改变了变量的生命期


2):static全局变量的用法:

a):普通全局变量可以跨文件用extern关键字来使用

b):static全局变量不可以yongextern关键字跨文件调用

c):加了static关键字之后,不同的文件可以有相同名字的全局变量

d):static全局变量的含义就是本源文件专用,或者叫本文件私有变量

例如A文件我们定义了一个变量

int g_iNumber;

可以在B文件调用:

extern int g_iNumber;

如果在A文件当中定义的是 

static int g_iNumber;

那么在B文件当中不可以出现:

extern int g_iNumber;

但是可以定义同名的变量:

int g_iNumber;

 

3:static成员变量的用法:

a):当类内的变量前面加上static后,就是静态成员变量;

b):静态成员变量的地址在全局区,是全局性质的变量;

c):静态成员变量只是名义上划分到类里面,但是该类的空间不包括静态成员变量

d):调用方法可以用对象或者this指针,也可以使用类名加定义域去使用

e):静态成员变量一般定义为公有(但是单例模式中为私有的),跟对象无关。它为全体类对象所有。

 

#include <iostream>

using namespace std;

class Test
{
public:
	static int i;
	Test()//:i(0) //ERROR static 成员变量不可以在这里初始化
	{
		//i = 0; ERROR:不可以在这里初始化
		i= 88; //但是如果在类外初始化了,这里可以调用i进行赋值修改操作
	}
	void func()
	{
		this->i = 9; //this指针调用static成员变量
	}
};
int Test::i = 0; 

int main()
{

	Test t1;
	t1.i = 9;//对象调用static成员变量
	Test::i = 10;//类名加定义域调用static成员变量
	cout<<sizeof(t1)<<endl; //输出为1; 说明static成员变量不属于类空间
	return 0;
}


4:static成员函数:

a)一个成员函数如果前面加上static关键字就是全局函数的性质;
b)只是名义上划归为某个类内,函数内没有this指针的形式参数;
c)静态成员函数内不可以通过this指针调用本类的成员(函数和变量);

d):普通成员函数可以调用普通成员变量和static成员变量

e):static成员函数不可以调用非静态成员变量,因为没有this指针;

#include <iostream>

using namespace std;

class Test
{
private:
	int m_iNum;
public:
	static int i;
	Test()//:i(0) //ERROR static 成员变量不可以在这里初始化
	{
		//i = 0; ERROR:不可以在这里初始化
		i= 88; //但是如果在类外初始化了,这里可以调用i进行赋值修改操作
	}
	void func()
	{
		this->i = 9; //this指针调用static成员变量
	}

	static int getNum()//(zhel没有隐藏的参数this指针,而普通的成员函数都有一个隐藏的参数this指针)
	{
		//int k = m_iNum;//ERROR 因为静态成员函数没有this指针,所以没办法访问非静态成员变量。
		i = 8888;//可以访问static成员变量,当然是可以的,因为static变量时全局性质的。

		return i;
	}
};
int Test::i = 0; 

int main()
{
	/*
	Test t1;
	t1.i = 9;//对象调用static成员变量
	Test::i = 10;//类名加定义域调用static成员变量
	cout<<sizeof(t1)<<endl; //输出为1; 说明static成员变量不属于类空间
	*/
	Test t1;
	t1.getNum();//对象调用static成员函数
	Test::getNum();//类名加定义域调用static成员变量
	return 0;
}


 

 

 

 

 

一次性解决static关键字

标签:style   io   ar   color   os   使用   sp   文件   on   

原文地址:http://blog.csdn.net/djb100316878/article/details/41280819

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!