靜態成員函式沒有this指標,是怎麼實現被物件訪問的

2022-03-08 03:59:59 字數 2055 閱讀 3990

1樓:胖胖丶不胖

有兩種方法:

例子:class c

;int main()

方法1,因為類的靜態成員函式還是在類中定義,所以屬於該類。cs.func();可以呼叫該函式。

方法2,靜態函式相當於有全域性的生命週期,因為屬於類c,所以可以用如下:c::func();

純手打望採納

2樓:匿名使用者

類的靜態函式被該類所有的例項所共享,因而沒有this指標,不能訪問類的非靜態成員,示例如下:

class cls

;virtual ~cls(){};

int m_value;

static int m_static_value; //靜態成員變數

static int foo(); //靜態函式int foo2();

};int cls::foo()

int cls::foo2()

int cls:m_static_value = 0;

cls var;

var.foo2(); //呼叫類的非靜態函式cls::foo(); //呼叫類的靜態成員函式cls var1; // var1的m_static_value 此時為1,因為靜態成員變數,被類cls的所有例項所共享

3樓:柯西and黎曼

講下this指標的作用,應該能幫助理解這個問題。

1:先講下為什麼非靜態成員函式會有乙個隱藏的this指標

如果對同乙個類定義了n個物件,則有n組同樣大小的空間以存放n個物件中的資料成員。但是,不同物件都呼叫同乙個函式**段。

那麼,當不同物件的成員函式引用資料成員時,怎麼能保證引用的是所指定的物件的資料成員呢?

這裡就得this指標出馬了

this指標是類的乙個自動生成、自動隱藏的私有成員,它存在於類的非靜態成員函式中,指向被呼叫函式所在的物件。全域性僅有乙個this指標,當乙個物件被建立時,this指標就存放指向物件資料的首位址。

2:靜態成員函式沒有this指標。

靜態成員函式被所有的類物件所共享,就是說對同乙個類定義了n個物件,這n個物件都呼叫同乙個靜態成員函式**段(非靜態成員函式也是被共享)。

靜態成員變數也是被所有的類物件所共享,就是說對同乙個類定義了n個物件,這n個物件都共享同乙個靜態變數的記憶體區

靜態成員函式只能直接訪問靜態成員變數(靜態成員函式也能通過物件間接訪問非靜態成員變數),

這說明什麼?

說明我們在用靜態成員函式直接訪問靜態成員變數的時候,根本不需要this指標來區分同乙個類定義的n個物件,因為這n個物件都共享同乙個靜態成員變數記憶體區。

3:this指標的目的是區分同乙個類的不同物件的資料區,而不是用於物件訪問自己的成員函式。

只要是在類中定義的函式,不管是靜態成員函式,還是非靜態成員函式,都可以被物件訪問。

4樓:

靜態成員函式可以獨立訪問 不需要建立類物件

c++中,類的普通成員函式通過this指標訪問普通成員變數,那訪問靜態成員變數時是怎麼實現的

5樓:匿名使用者

靜態成員變數的位置是確定的,不要物件就可以直接訪問。

比如下面**的兩種引用方法是等價的:

class test ;

int main()

c++靜態成員函式裡 為何不能使用成員變數this指標?

6樓:匿名使用者

靜態成員是共享的。所以沒有this,大家共享乙個變數,它不屬於任何一物件。

7樓:匿名使用者

static 成員,是在類的實力沒有建立前就存在的。

其他的成員必須是在類的例項建立才存在。

例如:class a

int b;

};int a::a = 5;

int main()

靜態成員函式擁有this指標嗎

8樓:超級

不能,靜態不能包含this,this只能作用與例項成員內

c 靜態成員函式訪問非靜態資料成員

沒有搞錯 bai這是c 語法所決定的 c 類的靜du態成員 變數和zhi靜態dao成員函式內是所有實容例共用的這個和c的靜態變數靜態函式的概念不一樣,需要理解所以類靜態函式訪問非靜態變數只有通過引數指明要訪問的物件才可以因為 i,j都是類物件當然可以訪問私有成員外部不允許訪問私有成員是說類以外 不允...

C語言中定義函式,變數是指向指標的變數,呼叫時要怎麼呼叫

首先fact函式返回的是double型別,第乙個引數是double型的二維指標.所以是 c i fact c,y,z 因為double c 3 是二維double指標,c i 是乙個double一維指標,c i 就是double型資料。c是二維指標,可以傳過去 c i fact c,y,z c i ...

函式影象必須是連續沒有間斷的嗎,函式影象一定是連續的嗎

函式影象千變萬化,bai有連續的,du也有大把不連續的,初等zhi數學dao中分段函式就是不連續專 的啊如 f x 1,x 0 f x 0,x 0 f x 1,x 0。注意他也是函式 函式就是有一一對應的數與數的關係就行了。判斷奇函式與偶函式只要把f x 寫出 就是用 x全部代替原函式的x,再化簡 ...