静态成员变量的一个测试

来源:互联网 发布:淘宝上的灯具质量好吗 编辑:程序博客网 时间:2024/06/10 23:15
//该类用来测试静态成员变量是否占有了类的空间class TestStatic{public:TestStatic(){};~TestStatic(){};static int GetValue(){ return m_nTestValue;}static void SetValue(int nValue){m_nTestValue = nValue;}private:static int m_nTestValue;static int m_nTestSize;};int TestStatic::m_nTestValue = 0;int TestStatic::m_nTestSize = 0;//该结构的用来测试在结构体里面使用的类的静态成员变量//和在结构体外面的是否是一个struct TestStaticCls {TestStatic tsc;int nTest;};/*总结:  静态成员变量并不占用类空间的大小,如TestStatic类的在VS2003下使用sizeof结果是1,  TestStaticCls使用sizeof结果是8(tsc实际为1,内存对齐占用3个字节).在这里其实类的  作用就相当于静态成员变量的命名空间一样的功能,限制了改全局变量只能通过该类  来访问。放在结构体中也是同样的原理。*/


TestStatic test1;//第一个对象test1.SetValue(4);//赋值TestStatic test2;//第二个对象未赋值cout<<test2.GetValue()<<endl;//直接输出结果为4TestStaticCls TestTsc;//结构体cout<<TestTsc.tsc.GetValue()<<endl;//输出结构体中tsc的值为4//test1,test2好理解,放在结构体中后让我有点不确定,所以才有此验证代码//TestStatic的大小为1而已,放在结构体中它也知道去找这个类,再去找这个类的方法TestTsc.tsc.SetValue(5);//设置结构体cout<<test1.GetValue()<<endl;//输出第一个对象的值为5,验证了静态变量全局的,不管你是存在于那种结构中。cout<<sizeof(TestStatic)<<"   "<<sizeof(TestStaticCls)<<endl;//输出1  8


结果:如下图



原创粉丝点击