<kbd id="daqct"></kbd>

  • <nav id="daqct"></nav>
    <wbr id="daqct"><pre id="daqct"></pre></wbr>
    <wbr id="daqct"></wbr>
    <form id="daqct"><th id="daqct"></th></form>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    C++中static用法介紹

    • 發布:C++培訓
    • 來源:學習筆記
    • 時間:2017-10-26 16:47

    1、c語言中static關鍵字用法

    c語言中static主要包括靜態局部變量、靜態全局變量和靜態函數三種。

    1.1 靜態局部變量

    該變量在函數中生成,但該變量生命周期長于函數生命周期。

    示例程序如下:

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    #include <iostream>

    using namespace std;

    void fun1()

    {

    static int staticVar = 1;

    int var = 1;

    staticVar += 1;

    var += 1;

    cout << "staticVar =" << staticVar << endl;

    cout << "var =" << var << endl;

    }

    int main(int argc, char* argv[])

    {

    fun1();

    fun1();

    system("pause");

    return 0;

    }

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////

    運行結果如下圖:

    staticVar由于是靜態局部變量,在第一次調用fun1()函數時初始化,在第二次調用fun1()函數時,由于staticVar保存在全局數據區,即忽略掉static int staticVar = 1;所以staticVal在第二次調用的初始值為2,而var在每次調用fun1()函數時都重新申請,故每次調用fun1()函數時,var的值不變。

    1.2 靜態全局變量

    變量定義在函數體外,用于修飾全局變量,在本文件內可見。

    代碼如下:

    ////////////////////////////////////////////////////////

    //file static1.cpp

    static int staticVal = 1;

    int var = 1;

    //file static2.cpp

    #include <iostream>

    using namespace std;

    extern int staticVal;

    extern int var;

    int main(int argc, char* argv[])

    {

    cout << "staticVar =" << staticVal << endl;

    cout << "var =" << var << endl;

    system("pause");

    return 0;

    }

    ////////////////////////////////////////////////////////

    編譯時報錯如下:error LNK2001: unresolved external symbol "int staticVal"。

    即普通變量var可以在其他文件中使用,而靜態變量staticVal只能在本文件中使用。

    1.3 靜態函數

    靜態函數和靜態全局變量類似,即該函數只能在本文件內使用。

    2、c++中static關鍵字用法

    c語言中static的用法同樣適用于c++,但c++還多兩種用法,即靜態成員變量和靜態成員函數。

    2.1 靜態成員變量

    靜態成員變量生命周期大于對象實例生命周期,靜態數據成員每個對象有一個,如該對象有多個實例也只有一個。普通數據成員每個實例都有一個拷貝。示例如下:

    /////////////////////////////////////////////////////////////////

    #include <iostream>

    using namespace std;

    class c1

    {

    private:

    int m_w;

    int m_h;

    static int m_sum;

    public:

    c1(int w, int h)

    {

    m_w = w;

    m_h = h;

    m_sum += (m_h + m_w);

    }

    void GetSum()

    {

    cout<<"sum = "<<m_sum<<endl;

    }

    ~c1()

    {}

    };

    int c1::m_sum = 0; //初始化

    int main(int argc, char* argv[])

    {

    cout<<"sizeof(c1)="<<sizeof(c1)<<endl;

    c1 *rect1 = new c1(1,1);

    rect1->GetSum();

    cout<<"sizeof(rect1)="<<sizeof(*rect1)<<endl;

    c1 rect2(1,1);

    rect2.GetSum();

    cout<<"sizeof(rect2)="<<sizeof(rect2)<<endl;

    system("pause");

    return 0;

    }

    /////////////////////////////////////////////////////////////////

    運行結果如下圖:

    sizeof(c1)=8表示靜態成員變量保存在全局數據區不占用類的存儲空間,兩次的sum值不同表示靜態成員變量只會初始化一次。

    2.2 靜態成員函數

    非靜態成員函數可以訪問靜態或非靜態成員變量,也可訪問靜態或非靜態成員函數;靜態成員函數只能訪問靜態成員變量和靜態成員函數。如將上例

    void GetSum()

    {

    cout<<"sum = "<<m_sum<<endl;

    }

    改為:

    static void GetSum()

    {

    cout<<"sum = "<<m_sum<<endl;

    }

    程序可以正常運行。如將程序改為如下情況,程序會報錯。

    static void GetSum()

    {

    cout<<"sum = "<<m_w<<endl;

    cout<<"sum = "<<m_sum<<endl;

    }

    因為m_w為非靜態成員。

    本文內容轉載自網絡,本著分享與傳播的原則,版權歸原作者所有,如有侵權請聯系我們進行刪除!

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:反匯編探索C++虛函數實現多態的機制
    下一篇:C語言學習之路,C語言學習的方法和思路

    C語言創建windows窗口實例

    C++回調函數是什么?

    C++ shared_ptr和動態數組

    C語言有哪些關鍵詞,C語言44個關鍵詞大全

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美三级片,白洁外传,第四色播日韩AV第一页,啪啪免费观看大全av 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>