類的靜態方法(函數)中為什麼不能調用非靜態成員(屬性)?

來源:互聯網
上載者:User

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/ZOLoveGD/archive/2008/09/14/2914559.aspx
程式最終都將在記憶體中執行,變數只有在記憶體中佔有一席之地時才能被訪問。

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

在一個類的靜態成員中去訪問其非靜態成員之所以會出錯是因為在類的非靜態成員不存在的時候類的靜態成員就已經存在了,訪問一個記憶體中不存在的東西當然會出錯:

class CA{
private:
    int a;     //非靜態成員,建立類的執行個體時分配記憶體,類的不同執行個體對應不同的記憶體地區 
    static int b;     //靜態成員,類載入時分配記憶體,類的所有執行個體共用

public:
    void fa(void){
        a = 1;
        b = 1;
    }

    static void fb(void){
        //a = 1;        //Non-static member can't be accessed by static function
        b = 1;
    }
};
/**
 *static member must be initialized before using,.
 *Or error:unresolved external symbol "private: static int CA::b"
 */
int CA::b = 1;

int main(void){
   
    CA ca;
    ca.fa();

    CA::fb();

    return 0;
}

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/ZOLoveGD/archive/2008/09/14/2914559.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.