Static修飾class成員函式與成員變數

2021-10-01 12:12:19 字數 1678 閱讀 7235

二.(非)靜態函式與(非)靜態成員變數之間的問題

三.static總結

1.能否通過類名呼叫類的非靜態成員函式?

不行,因為類中的非靜態成員函式還沒有例項化,所以也就沒有具體分配空間,所以還不能呼叫。

#include

using

namespace std;

class

base};

intmain()

2.能否通過類名呼叫類的靜態成員函式?

可以,因為靜態成員函式在類載入時就已經存在了。

#include

using

namespace std;

class

base};

int base::i =10;

intmain()

1.靜態成員函式可以直接訪問靜態成員變數嗎?

可以,因為兩者都是在類進行初始化時就有了。(函式存放在程式區,變數放在全域性區)

注意:針對靜態成員變數

要靜態成員變數進行定義;因為在類中只是對靜態成員變數進行了申明,並沒有在全域性區實際分配處空間,這樣會使靜態成員函式不認識靜態成員變數。

可能會有疑惑:為什麼函式不需要進行初始化?

靜態函式在類載入時,就已經完成申請空間了。

#include

using

namespace std;

class

base

static

int _i;

private:}

;int base::_i =0;

//進行初始化的原因是f函式已經進入**區,但是_i只是進行了申明,但是並沒有在全域性區申請處空間,所以還需要在類外進行初始化

intmain()

2.靜態成員函式可以直接訪問非靜態成員變數嗎?

不能,因為非靜態成員變數要等待物件例項化之後才能建立,而靜態成員函式在類的初始化時就已經建立,此時靜態成員函式還不認識非靜態成員變數,所以不能進行訪問。

#include

using

namespace std;

class

base

private

:int _i;};

intmain()

3.非靜態成員函式能否訪問靜態成員變數?

可以,因為靜態成員變數是在類的初始化時便已經申請好了空間進行了建立;非靜態成員函式是在物件例項化之後才申請了空間進行建立。

#include

using

namespace std;

class

base

private

:static

int _i;};

int base::_i =0;

intmain()

4.非靜態成員函式能否訪問非靜態成員變數?

可以,理所當然。

static 總的來說是為了為一整個類,而不是類的例項物件提供服務的修飾詞,它存放在全域性靜態區,靜態成員函式在類載入時自動分配空間,靜態成員變數則需要自己申請空間。

static修飾成員變數

static 靜態 修飾符 static修飾成員變數 如果乙個資料需要被所有物件共享使用的時候,那麼即可使用static修飾該成員變數。訪問方式 方式1 可以使用物件進行訪問。格式 物件.靜態屬性名 方式2 可以使用類名進行訪問。格式 類名.屬性名。靜態成員變數要注意的細節 1.靜態的成員變數可以使...

Static修飾成員方法

當使用了static修飾了成員變數或者成員方法,則需要用類名稱去呼叫。就算不建立物件也可以直接用類名稱 點的方式呼叫。注意 1.靜態方法不可以直接呼叫非靜態方法或者成員。因為在記憶體中,先生成的靜態方法及變數,後生成的成員變數及方法 2.靜態方法中不可以使用this關鍵字 因為this關鍵字代表的是...

C 靜態成員 細談static修飾的成員

首先,我們先通過字面意思來理解.成員 成員變數 成員函式。static 修飾成員變數,還有修飾成員函式。static 宣告為靜態的,稱為靜態成員。不管這個類建立了多少個物件,靜態成員只有乙個拷貝,這個拷貝被所有屬於這個類的物件共享。靜態成員,屬於類 而不是物件。1.static 修飾成員變數 靜態變...