關於靜態成員變量在類繼承中的一個誤區

     以前一直認爲:靜態成員變量是該類共有的,那麼其派生類就一定要開闢一段新的內存來該存儲派生類從基類中繼承的靜態成員變量。
    正確的說法應該是:基類和其派生類 共享該基類的靜態成員變量內存!
    可以看下面的代碼:
#include<iostream>
class base
{
    int mx;
public:
    static int xxx;
    static void fun(int x)
    {
        xxx=x;
    }
    base(int x):mx(x){}
    friend std::ostream& operator<<(std::ostream& ,base&);
};
int base::xxx=0;

class test:public base
{
    public:
    test(int x):base(x){}
};

std::ostream& operator<<(std::ostream& os,base& s)
{
    os<<s.mx;
    return os;
}
int main()
{
    test x(321);
    base y(123);
    std::cout<<test::xxx<<std::endl;
    base::fun(888);
    std::cout<<base::xxx<<std::endl;
    std::cout<<test::xxx<<std::endl;
    test::fun(999);
    std::cout<<base::xxx<<std::endl;
    std::cout<<test::xxx<<std::endl;
    std::cout<<x<<std::endl;

    std::cout<<y<<std::endl;
    return 0;
}

輸出:
       0
       888
       888
       999
       999
       321
       123

 

發佈了30 篇原創文章 · 獲贊 21 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章