close

在class中 , 我們若想要宣告一個data member為static , 通常分為public 與 private,

若是public , 則代表這個class的所有object都共享這個 data member , 

而且這個data member 可以藉由class的name scope直接從外面存取.

int GenerateID()
{
    static int s_nID = 0;
    return s_nID++;
}

int main()
{
   std::cout << GenerateID() << std::endl;
    std::cout << GenerateID() << std::endl;
    std::cout << GenerateID() << std::endl;
    return 0;
}

 

若是宣告在private內 , 則代表這個class的所有object都共享這個 data member , 

但是不像public的方式 , 除了這個class的object外 , 沒有方法可以進行存取.

class Something
{
private:
    static int s_nIDGenerator;
    int m_nID;
public:
    Something() { m_nID = s_nIDGenerator++; }

    int GetID() const { return m_nID; }
};

int Something::s_nIDGenerator = 1;

int main()
{
    Something cFirst;
    Something cSecond;
    Something cThird;

    using namespace std;
    cout << cFirst.GetID() << endl;
    cout << cSecond.GetID() << endl;
    cout << cThird.GetID() << endl;
    return 0;
}
 

另外 , 不管是宣告在public 或是在private內 , 我們都可以在這個class的外面對這個static data memeber進行初始化.

 

ref : http://www.learncpp.com/cpp-tutorial/811-static-member-variables/

ref : http://nknucc.nknu.edu.tw/~jwu/c/cpgch14.htm

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 JerryCheng 的頭像
    JerryCheng

    KwCheng's blog

    JerryCheng 發表在 痞客邦 留言(0) 人氣()