您的位置:首页 > 其它

关于静态变量和函数粗浅理解(很粗,很浅)

2014-06-12 04:16 239 查看
#include<iostream>
#include<string>
using namespace std;
// int n;

//***************************************类中的静态成员变量*******************************************************
class Stu{
	public:
		int id;
		string name;
		static int num;//由于不属于任何一个对象而是属于整个类,所以在没有构造对象之前就可以对它进行访问,访问时
			       //访问格式见 line35
			       //遵循访问规则(public,private,protected)

//******************************************静态成员函数**********************************************************
		static int getNum(){	//没有this指针
		
			return num;
		}			//只能访问静态成员变量<span style="color:#ff0000;">//在此修改,在没有参数表的情况下才是只能访问静态变量,如果有参数表,可以访问参数对象的私有,保护,公有变量</span>
					//不能定义为虚函数(个人理解:本质并不属于类,无所谓继承和多态性)
					//访问格式见 line35
};
int Stu::num =0;//静态成员不储存在类中,初始化时要分配内存,所以在类外声明
		//区别于定义的全局变量,要加Stu::命名空间
//<span style="color:#ff0000;">在类外声明静态函数时要省略static,和静态变量的声明类似</span>
void f(int & a){
a+=1;
}

int main(){
///cout<<n<<endl;
//n=3;
//****************************************************静态变量**********************************************************	
	
	//********静态成员变量和函数的访问规则
	cout<<Stu::getNum()<<endl;
	cout<<Stu::num<<endl;
	Stu a;
	cout<<a.num<<endl;
	cout<<a.getNum()<<endl;
	
	for(int i=0;i<10;i++){
		static int n;//在程序块中声明只会被初始化一次
				//该变量的值会一直保存,直到下一次该函数再次被调用
				//该函数结束的时候,n的内存不会被释放,而是在整个程序结束的时候被释放
				//该变量不能在函数之外被访问
				//ps:以上说的函数是指一个程序块{}
				//优势在于如果是在f()内定义的话,变量的值保存到下次被调用
		cout<<n<<endl;
		n++;
	}
//cout<<" "<<n<<endl;
//	f(n);		//静态全局变量不能被别的文件调用,但是可以被函数赋值修改
			//而extern int n定义之后如果在别的文件中声明extern int 的话可以调用
//cout<<"  "<<n<<endl;
//*******************************************************静态函数*******************************************************
//		只能在本文件中使用,其他文件中定义相同的名字不会有重名的冲突

return 0;
}

//***********************
//小结
//	1) 静态变量 和 静态成员变量 可以统一理解,
//		把类看作一个函数
//		或者把函数看作一个拥有命名空间的类

//	2) 静态函数用的不多,静态成员函数访问规则和理解也都见注释
//	
// 版权所有,仿冒会有道德谴责


</pre><pre>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: