静态成员变量的一个测试

//该类用来测试静态成员变量是否占有了类的空间
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;//直接输出结果为4

	TestStaticCls 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


结果:如下图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值