成員函數訪問靜態成員變數
❶ C++中引入靜態成員函數有什麼意義
靜態成員函數的特點:
被類的所有的對象共有,不屬於某一個對象。通過類名::就可以直接調用。
跟普通的成員函數比,沒有隱藏的this指針作為參數。這一點可用於封裝線程類。
靜態成員函數只可以訪問靜態成員變數。
❷ 什麼叫靜態函數成員,它有何特點
靜態成員:不管這個類創建了多少個對象,靜態成員在內存中只保留一份,靜態成員用來解決同一個類中不同對象之間數據成員和函數的共享問題。
1、靜態成員函數是用關鍵詞static聲明的成員函數,它屬於整個類而並不屬於類的某個對象。
類的靜態成員(變數和方法)屬於類本身,在類載入的時候就會分配內存,可以通過類名直接去訪問;非靜態成員(變數和方法)屬於類的對象,所以只有在類的對象產生(創建類的實例)時才會分配內存,然後通過類的對象(實例)去訪問。
由於靜態函數是獨立於類對象而存在的,因此靜態成員函數中沒有this指針。所以靜態成員函數不可以直接訪問類中的非靜態成員,但是可以直接訪問靜態成員。
若要訪問非靜態成員時,必須通過參數傳遞的方式得到相應的對象,再通過對象來訪問。
❸ C++類中靜態對象成員的訪問!
類其實是個模型。
而對象就是找個這個模型製作的實體。
比如,類是造車的圖紙,對象就是找個圖紙造出的汽車。
類的成員是分級別的:protect,public,private。
在類內部定義的函數可以訪問任何一個變數,或者調用任何的類內部的函數,但是,如果被定義成private的話,對象是不能調用的,也就是對象只能調用定義為public的數據,如果你確實需要調用某個private的變數,你可以定義一個public的函數來返回這個變數,比如:
class
d
{
private:
int
a;
public:
int
getint(){return
a;}
......
}
這里你的對象不能調用a的,
也就是不能
int
b;
d
d;//假設已經寫好了構造函數
b=d.a;//這是錯誤的,
但是你可以
b=d.getint();
這樣就可以把a的值給b了。
所有的public的函數都可以通過
<對象>.<函數名>
的方式來調用
❹ 一個類的靜態函數怎麼調用這個類的成員變數,有方法嗎
原因如下;
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員
❺ c++中,類的普通成員函數通過this指針訪問普通成員變數,那訪問靜態成員變數時是怎麼實現的
靜旁讓態成員變數的位置是確定的,不要對象就可以直接訪問。
比如下面代碼稿李的兩種引用方法是等價的:
classTest{
public:
staticintms_Data;
};
intmain(){
Test鍵啟遲t;
std::cout<<t.ms_Data<<std::endl;
std::cout<<Test::ms_Data<<std::endl;
}
❻ 為什麼靜態函數只能訪問靜態的數據成員
這個靜態對應的不是動態,沒有對應的詞,普通的就叫「數據成員」和「函數成員」
靜態的意思是跟這個類的對象實例沒關系,是類范圍的,一個類可以生成多個對象,但只有一份靜態數據成員。
普通函數成員會隱式傳遞一個this指針,指向調用這個函數的對象;而靜態函數成員不包括這個指針,所以在靜態成員函數內不能使用非靜態的數據成員和函數。