當前位置:首頁 » 密碼管理 » 靜態成員函數訪問靜態成員變數

靜態成員函數訪問靜態成員變數

發布時間: 2023-01-21 10:36:47

㈠ 靜態成員函數不可以訪問類中的成員變數

訪問的意思就是讀或者寫,輸出屬於讀出行為,自然不行。

靜態成員函數不屬於任何一個類對象,沒有this指針,而非靜態成員必須隨類對象的產生而產生,所以靜態成員函數"看不見"非靜態成員,自然也就不能訪問了

但是如果靜態成員函數通過引用一個對象,是可以直接訪問成員的,也體現了它成員函數的特權。

比如

classA
{
intm_i;
public:
staticvoidf()
{
m_i=666;//這是非法的,這個等價於this->m_i=666,而靜態方法沒有this
}
staticvoidf(A&a)
{
a.m_i=666;//這樣就可以
}
};

㈡ 靜態成員函數為什麼只能訪問靜態成員

靜態成員函數與靜態變數不需要通過創建對象實例化,就可以進行調用。
而非靜態變數就必須通過創建對象實例化,我們才能用這個對象調用它。
如果靜態函數中出現非靜態成員。
無創建對象的靜態方法 中,沒有滿足調用非靜態成員的條件。

㈢ 一個類的靜態函數怎麼調用這個類的成員變數,有方法嗎

原因如下;
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員

㈣ 靜態成員函數和非靜態函數訪問靜態成員變數的區別

靜態成員函數不能訪問非靜態成員變數,這是規定。
但是你可以換下解決問題的思路。線程的入口函數除了可以鎖靜態成員函數,也可是全局函數。
在全局函數里獲取主窗口的句柄之後,接下來可以訪問各種成員變數。
希望對你有幫助。

㈤ C++中引入靜態成員函數有什麼意義

靜態成員函數的特點:

  1. 被類的所有的對象共有,不屬於某一個對象。通過類名::就可以直接調用。

  2. 跟普通的成員函數比,沒有隱藏的this指針作為參數。這一點可用於封裝線程類。

  3. 靜態成員函數只可以訪問靜態成員變數。

㈥ 什麼叫靜態函數成員,它有何特點

靜態成員:不管這個類創建了多少個對象,靜態成員在內存中只保留一份,靜態成員用來解決同一個類中不同對象之間數據成員和函數的共享問題。

1、靜態成員函數是用關鍵詞static聲明的成員函數,它屬於整個類而並不屬於類的某個對象。

類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配內存,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時才會分配內存,然後通過類的對象(實例)去訪問。

由於靜態函數是獨立於類對象而存在的,因此靜態成員函數中沒有this指針。所以靜態成員函數不可以直接訪問類中的非靜態成員,但是可以直接訪問靜態成員。

若要訪問非靜態成員時,必須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。

㈦ 靜態成員函數怎麼使用成員數據

1、編譯時候靜態數據和成員函數就有了它的內存區,它不屬於類的任何一個具體對象。所以,靜態成員函數在編譯時候就需要確定x及y的值,而那個時侯變數x,和y還沒有創建,所以不可以訪問非靜態的數據成員。

2、一般情況下靜態成員函數用於訪問同一類中的靜態數據成員或全局變數,而不訪問非靜態成員,如需訪問非靜態成員,需要將對象作為參數,通過對象名訪問該對象的非靜態成員。
3、我寫了一個,您參考一下
#include <iostream>
using namespace std;

class test
{
public:
int x,y;
public:
test(int a=1 , int b=1) { x=a; y=b;}
static void a(test t) { t.x=t.x+t.y; }
void print() {cout<<"x="<<x<<endl; cout<<"y="<<y<<endl;}

};

void main()
{
test t;
t.print();
t.a(t);

t.print();

}

㈧ 為什麼靜態函數只能訪問靜態的數據成員

這個靜態對應的不是動態,沒有對應的詞,普通的就叫「數據成員」和「函數成員」
靜態的意思是跟這個類的對象實例沒關系,是類范圍的,一個類可以生成多個對象,但只有一份靜態數據成員。
普通函數成員會隱式傳遞一個this指針,指向調用這個函數的對象;而靜態函數成員不包括這個指針,所以在靜態成員函數內不能使用非靜態的數據成員和函數。

熱點內容
外國編程 發布:2025-08-27 22:20:27 瀏覽:359
六位手機號服務密碼一般是多少 發布:2025-08-27 21:47:53 瀏覽:766
如何復位酷開路由器的密碼 發布:2025-08-27 21:36:25 瀏覽:599
labsql訪問資料庫 發布:2025-08-27 21:13:43 瀏覽:106
a4紙板文件夾 發布:2025-08-27 20:47:15 瀏覽:611
我的世界發展迅速的伺服器 發布:2025-08-27 20:33:07 瀏覽:586
怎樣設置郵箱伺服器ip 發布:2025-08-27 20:25:47 瀏覽:864
萬彩動畫大師怎麼配置java路徑 發布:2025-08-27 20:16:58 瀏覽:161
linux中的用戶 發布:2025-08-27 20:11:36 瀏覽:455
我的世界伺服器怎麼創造不了 發布:2025-08-27 19:43:00 瀏覽:905