以前一直認爲:靜態成員變量是該類共有的,那麼其派生類就一定要開闢一段新的內存來該存儲派生類從基類中繼承的靜態成員變量。
正確的說法應該是:基類和其派生類 共享該基類的靜態成員變量內存!
可以看下面的代碼:
#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