⑴ 一個類的靜態函數怎麼調用這個類的成員變數,有方法嗎
原因如下;
和靜態數據成員一樣,靜態成員函數是類的一部分,而不是對象的一部分。如果要在類外調用公用的靜態成員函數,要用類名和域運算符「∷」。
如 Box∷volume( ); 實際上也允許通過對象名調用靜態成員函數,如 a.volume( ); 但這並不意味著此函數是屬於對象a的,而只是用a的類型而已。 靜態成員函數的作用是為了能處理靜態數據成員。 可以說,靜態成員函數與非靜態成員函數的根本區別是:非靜態成員函數有this指針,靜態成員函數並不屬於某一對象,它與任何對象都無關,靜態成員函數沒有this指針。
由此決定了靜態成員函數不能訪問本類中的非靜態成員。 在C++程序中,靜態成員函數主要用來訪問靜態數據成員,而不訪問非靜態成員。假如在一個靜態成員函數中有以下語句: cout<<height<<endl; //若height已聲明為static,則引用本類中的靜態成員,合法 cout<<width<<endl; //若width是非靜態數據成員,不合法。但是,並不是絕對不能引用本類中的非靜態成員,只是不能進行默認訪問,因為無法知道應該去找哪個對象。如果一定要引用本類的非靜態成員,應該加對象名和成員運算符「.」。如 cout<<a.width<<endl; //引用本類對象a中的非靜態成員
⑵ c++類中靜態成員函數怎麼修改靜態成員的值 望舉例
#include <iostream>
using namespace std;
class teacher
{
public:
static int a;
static void function();
};
int teacher::a = 10; // 靜態數據成員要在main函數外面初始化
void teacher::function()
{
a ++;
}
void main()
{
cout<<"第一次a值為"<<teacher::a<<endl;
teacher::function();
cout<<"經過函數運算後a的值為"<<teacher::a<<endl;
}
⑶ 靜態數據成員可以直接用類名調用嗎為什麼
靜態數據成員是在類裝載的時候就分配了內存空間,而類的成員變數是在生成對象時分配內存空間。所以只要類裝載了,就可以用類名訪問靜態數據成員。事實上,該類的所有對象都只保存類靜態數據成員的引用,他們都指向同一塊內存區域。
⑷ 怎樣通過對象調用靜態成員數據,
不能通過對象調用靜態數據成員的,因為靜態數據成員不屬於對象而是屬於類。
因此,你只能通過類名來調用靜態數據成員。
⑸ static的方法怎麼調用資料庫
全局變數前加上關鍵字static,全局變數就定義成一個全局靜態變數.,全局靜態變數存儲在靜態存儲區,在整個程序運行期間一直存在。全局靜態變數在程序運行之前就存在。初始化:未經初始化的全局靜態變數會被自動初始化為0(自動對象的值是任意的,除非他被顯式初始化)。作用域:全局靜態變數在聲明他的文件之外是不可見的,准確地說是從定義之處開始,到文件結尾。
局部靜態數據
在局部變數之前加上關鍵字static,局部變數就成為一個局部靜態變數。局部靜態變數再程序執行到作用域時候,就會存在。
局部靜態數據再內存中的靜態存儲區。
初始化:未經初始化的全局靜態變數會被自動初始化為0(自動對象的值是任意的,除非他被顯式初始化)。
作用域:作用域仍為局部作用域,當定義它的函數或者語句塊結束的時候,作用域結束。但是當局部靜態變數離開作用域後,並沒有銷毀,而是仍然駐留在內存當中,只不過我們不能再對它進行訪問,直到該函數再次被調用,並且值不變。
靜態函數
在函數返回類型前加static,函數就定義為靜態函數。函數的定義和聲明在默認情況下都是extern的,但靜態函數只是在聲明他的文件當中可見,不能被其他文件所用。
函數的實現使用static修飾,那麼這個函數只可在本cpp內使用,不會同其他cpp中的同名函數引起沖突。
warning:不要再頭文件中聲明static的全局函數,不要在cpp內聲明非static的全局函數,如果你要在多個cpp中復用該函數,就把它的聲明提到頭文件里去,否則cpp內部聲明需加上static修飾。
類的靜態成員
靜態成員可以實現多個對象之間的數據共享,並且使用靜態數據成員還不會破壞隱藏的原則,即保證了安全性。
靜態數據成員不能在類中初始化,實際上類定義只是在描述對象的藍圖,在其中指定初值是不允許的。也不能在類的構造函數中初始化該成員,因為靜態數據成員為類的各個對象共享,否則每次創建一個類的對象則靜態數據成員都要被重新初始化靜態成員可以被初始化,但只能在類體外進行初始化。 一般形式:數據類型 類名::靜態數據成員名=初值。
靜態成員不可在類體內進行賦值,因為它是被所有該類的對象所共享的。你在一個對象里給它賦值,其他對象里的該成員也會發生變化。
靜態成員屬於整個類所有,不需要依賴任何對象,它在對象中不佔用存儲空間。
靜態成員仍然遵循public,