類內的static例項

2021-06-29 11:37:48 字數 1444 閱讀 5702

之前寫過一篇c++中關於static的用法的文章,裡面對「類內的該類的static例項」的理解有問題,在此做重要更新!

#include using namespace std;

class a

a(int n) : i(n) {}

static int pub;

static a sta; //正確,可以在類內定義該類的static的例項

//a na; 錯誤,類a的定義不完整

a *pa; //正確,指標的大小是確定的

static void fun1() //正確,靜態成員函式可以定義在類內,也可以定義在類外。在類外定義不能加static。

void fun2()

private:

int i;

//static int j = 0; 錯誤,不能在類的內部定義靜態成員!

static int j; //在類內只能宣告靜態成員!

};//在類外對靜態成員進行定義,其目的是防止類的多個例項對static成員的重複定義!

int a::pub = 0;

int a::j = 0;

a a::sta = a();

int main()

上面的類中有三個個static的用法,分別是static成員變數(pub,j),static成員函式(fun1)和static物件例項sta。

static成員變數和成員函式與之前部落格介紹的沒有區別,

static成員變數:具有區域性變數的作用域和全域性變數的生命週期,在類中受訪問控制符的限制(private、protected、public);要在類外進行定義和初始化。

static成員函式:可以使用類直接呼叫的成員函式,由於可以不用例項就能呼叫,所以static成員函式「一般情況下」只能使用static成員變數。

static類例項:也是static成員變數的一種,也要在類外進行定義和初始化,如上面類a的sta成員。

static類例項的特殊用法:

1. 在類中,只能定義該類的指標或static的例項,不能定義一般的例項,如上例中的sta、na和pa;

2. 由於編譯器首先完成類的static成員的初始化工作(類外定義),所以在類的成員函式中可以通過sta使用類的成員變數,無論是static還是非static的;

第2點尤其讓人迷惑,因為2似乎破壞了static成員函式的一條性質,就是static成員函式只能使用類的static成員變數,但是通過sta,上面類中的fun1居然可以使用非static成員變數i!其實這點也好理解,因為還是那句話「編譯器首先完成類的static成員的初始化工作」,所以sta實實在在是類a的乙個例項,通過sta可以訪問類a的任何成員變數和成員函式。又因為sta是static的,那麼static的成員函式fun1當然也可以使用sta,在通過sta呼叫i!

最後,像sta這樣的static例項到底有什麼用,我還沒有很理解,希望能有大神指點!

Python語言的類例項化後的類內資料的私有和公有

首先說這個特性有些坑爹,在周五耗掉了我大半天來弄懂了這個問題 之前關鍵是不知道怎麼描述這個問題 另外我寫python喜歡寫分號 見笑了 先說結論結論就是,私有變數的寫法 class obj object docstring for obj def init self,arg super obj,se...

探秘static 類不需例項化就能用?

一般情況下,需要用到某個類的時候,都必須先例項化這個類,才能對其進行呼叫。在程式設計過程中發現,有些類不用例項化就可以直接拿來使用,使用它的字段 方法等等。這時候,靠的就是static作用。static英文意思為 靜止的,靜態的 在oop中可以作為修飾符,類 字段 屬性 方法等被static修飾後,...

類的static成員

類static成員的兩個問題 如果需要在乙個類的各個物件間互動,即需要乙個資料物件為整個類而非某個物件服務,這個時候常用類成員來解決問題。1 靜態資料成員要在類外定義。class teststatic static int teststaticfunction teststatic obj priv...