靜態成員數據和靜態成員函數
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++是某個類。
本文來自CSDN博客,原文出處:http://blog.csdn.net/niurou9527/archive/2008/12/17/3539785.aspx