以前一直认为:静态成员变量是该类共有的,那么其派生类就一定要开辟一段新的内存来该存储派生类从基类中继承的静态成员变量。
正确的说法应该是: 基类和其派生类共享该基类的静态成员变量内存!
可以看下面的代码:
#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;
return 0;
}
输出:
0
888
888
999
999
321
123
正确的说法应该是: 基类和其派生类共享该基类的静态成员变量内存!
可以看下面的代码:
#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;
return 0;
}
输出:
0
888
888
999
999
321
123