首先呢我們知道c++類中的成員分為成員變數和成員函式兩大類,如果再加上static給以區分的話那麼就會有以下四種:靜態成員變數,非靜態成員變數;靜態成員函式,非靜態成員函式
(1)成員變數
我們知道類的靜態成員變數是屬於整個類的,而不是屬於某乙個物件的(不可能據為某個可惡的物件自己擁有,因為這是大家的),靜態成員變數在記憶體中只存在乙份供各個類的例項使用。而非靜態成員變數在建立物件時都會建立屬於當前建立物件的乙份,這是屬於這個物件自己的乙份。
靜態成員變數一般在類的外部進行定義形式為:
staticclassname mainclassname:: staticmembername =value;
簡單驗證**:
#include
using namespace std;
class myclass
static int static_member;
int non_static_member;
};int myclass::static_member=5;
int main()
(2)成員函式
c++中所有的成員函式(靜態/非靜態)都存放在**區,所有物件都享有這乙份,但是靜態成員函式和非靜態成員函式在呼叫成員變數卻有著限制
(1)靜態成員函式不屬於某個物件,它屬於整個類,在類外部呼叫的時候你可以通過兩種方式呼叫
1)class:: staticmethod()
2) classobject.staticmethod()
也正因為靜態成員函式屬於整個類,所以在其內部不存在this指標;而在非靜態成員函式內部會存在乙個隱藏的this指標,用來標定當前是哪個類的例項呼叫了此函式;
然後呢,靜態成員函式不能直接呼叫類的非靜態成員變數,因為從上邊我們知道非靜態成員變數在類的例項建立時才會分配記憶體,而我們的靜態成員函式在類的例項建立之前就已經存在,你總不能去用還沒建立的東西吧?
#include
using namespace std;
class myclass
static void display();
static int static_member;
int non_static_member;
};int myclass::static_member=5;
void myclass::display()
///但是我們卻可以通過靜態成員函式的形參來間接呼叫某個物件的非靜態成員變數;
#include
using namespace std;
class myclass
static void display(myclass obj);
static int static_member;
int non_static_member;
};int myclass::static_member=5;
void myclass::display(myclass obj)
C 靜態成員和非靜態成員
一 c 靜態成員和非靜態成員 1.c 靜態成員和非靜態成員 當類中的某個成員使用static修飾符時,就會被宣告為靜態成員。類中的成員要麼是靜態成員,要麼是非靜態成員。一般情況下,靜態成員屬於整個類所有,被該類的所有例項所共享。而非靜態成員則屬於類的例項 物件所有,只被該例項所共享。因此,對於類的靜...
靜態成員和非靜態成員
類中的成員要麼是靜態的要麼是非靜態的。一般來說,靜態成員都歸屬於類所有,使用 static 關鍵字來宣告,不能在類的例項中訪問靜態成員 非靜態成員屬於類的例項 物件所有,不能按照類訪問靜態成員來訪問。下面用乙個例項來幫助理解 using system using system.collections...
靜態成員和非靜態成員
靜態成員和非靜態成員 1.含義 在c de 成員變數被宣告為static 稱為靜態成員變數 在類被例項化時建立,通過類進行訪問,意味著它為該類的所有例項所共享,當某個類的例項修改了該靜態成員變數,其修改值為該類的其它所有例項所見,也就是說乙個類的所有例項的同一靜態變數都是同乙個值。不帶有 stati...