C/C++中static变量和static函数的用法
静态成员数据和静态成员函数
1.C中静态数据和静态函数的用法
C语言中定义一个静态变量和静态函数主要是为了满足某个文件的需求
比如我们在文件List.c中定义
static int count = 0; //静态变量
static int get_last_node(List *Head);//定义静态函数
二者的作用域都仅仅在文件List.c中。如果main函数在static int get_last_node(List *Head)
之前定义,那么就应该在头文件后面用语句:
static int get_last_node(List *Head);//定义静态函数
进行声明。
如果main定义在static int get_last_node(List *Head)之后则不需要。(建议静态函数都在头
文件后声明)
#include<stadio.h>
static int count = 0; //静态变量
static int get_last_node(List *Head);//定义静态函数
void main()
{
List *Head;
.....
int ret = get_last_node(Head);
......
}
static int get_last_node(List *Head)
{
.....
return ret;
}
-----------------------------------------------------------
#include<stadio.h>
static int count = 0; //静态变量
static int get_last_node(List *Head)
{
.....
return ret;
}
void main()
{
List *Head;
.....
int ret = get_last_node(Head);
......
}
------------------------------------------------------------
2.C++中静态成员数据和静态成员函数的用法
静态成员数据:
在C++中如果某个变量属于类而并非属于某个对象的话,可以将其定义为静态成员数据。因为静态
成员数据不属于任何一个对象,所以他不能在构造函数中进行初始化(否则每定义一个对象就要
初始化一次),所以在类定义的时候就应该初始化。这样会出现另外一个问题,如果在类的定义
中对静态成员数据进行初始化,那么当重复包含类头文件定义的时候,静态变量就会被重复初始
化。解决这个问题可以把类的声明和实现分开到两个文件中。比如类的声明放在list.h中而实现
房子List.cpp中,这也就是平常见到的C++程序的文件模式。
同样静态成员数据也有public和private之分。
声明方法为:static 数据类型 成员变量名
初始化方法为: static 类名::成员变量名 = 值
静态成员函数:
相同与静态成员数据,静态成员函数也是属于某个类而非某个对象
声明方法为: static 返回值类型 函数名(参数列表)
具体实现方法为: 类名::函数名(参数列表) 注意:没有staic 和 返回值类型了
--------------------------------------------------------------
Class Node{
public:
......
static int Node_Alloc();//声明静态成员函数
private:
......
static int count;
}
//Node.h
.......
static int count = 0; //初始化静态成员数据
Node::Node_Alloc() //注意:没有static关键字
{
....
raturn ret ;
}
//Node.cpp
----------------------------------------------------------------
C语言和C++在静态变量和静态函数的定义中有很多相似的地方,比如都是在某个特定的作用域内,c是在某个文件,c++是某个类。