靜態成員函數和常成員函數

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

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

類的靜態成員(變量和方法)屬於類自己,在類加載的時候就會分配內存,能夠經過類名直接去訪問;非靜態成員(變量和方法)屬於類的對象,因此只有在類的對象產生(建立類的實例)時纔會分配內存,而後經過類的對象(實例)去訪問。spa

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

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

class B{ 
private: 
    int x; 
    int y; 
    static int count; 
public: 
    B():x(0), y(0){ 
        count++; 
    } 
    B(int xx, int yy):x(xx), y(yy){ 
        count++; 
    } 
    static int getObjCount(); 
}; 
int B::count = 0; 
int B::getObjCount(){ 
    return count; 

int main() 

    cout << B::getObjCount() << endl; 
    B b1; 
    B b2(10, 20); 
    cout << b1.getObjCount() << endl; 
    cout << b2.getObjCount() << endl; 
    cout << B::getObjCount() << endl; blog

   B *p = new B;
   cout << p->getObjCount()<< endl;
    return 0; 
內存

 靜態數據成員的類型能夠是所屬類的類型,而普通數據成員則不能夠。普通數據成員的只能聲明爲所屬類類型的 指針或引用。舉例以下: 

class base{ 
public : 
static base _object1;//正確,靜態數據成員 
base _object2;//錯誤 
base *pObject;//正確,指針 
base &mObject;//正確,引用 
}; get

二、常成員函數    io

返回類型     成員函數名   (參數表)  const  ;class

在定義時使用const關鍵字修飾的用於訪問類的常對象函數,成爲常成員函數。

常成員函數不能更新對象的數據成員,也不能調用該類中的沒有用const修飾的成員函數,但能夠被其餘成員函數調用。

常對象只能調用常成員方法,而不能調用其餘的成員函數。

const關鍵字能夠用於對重載函數的區分

class CDate
{
private:
 int y;
 int m;
 int d;
public:
 int year()const;
 int month() const;
 int day(){return d++ ;}
 //int day()const {return d;}
 int AddYear(int i){return y+1;}

};

int CDate::year()const
{
 return y;
}
int CDate::month()const
{
 return m;
 //return m++;   錯誤:常成員函數中不能更新類的數據成員
}

int main(){ CDate const date; //int day = date.day(); 錯誤常對象不能調用很是成員函數 int year = date.year();}

相關文章
相關標籤/搜索