C++下如何更好的定义结构体

int main()
{

	//如何更好的使用结构体
	//例如RPG游戏中通常角色定义如下:
	struct Character
	{
		//基本数据
		INT mCharID;
		INT mLevel;
		CHAR mName[ 32 ];
		INT mExp;
		INT mJob;

		//货币
		INT mCopper;
		INT mIngot;
		
		//属性点
		INT mSP;
		INT mPower;
		INT mHonour;
		//等等其他属性
		//......

		//序列化
		void Serialize()
		{
			//stream << ...
		}

		//其他方法
		void AddProperty()
		{

		}
	};

	//使用的时候虽然简单其实很不方便很容易出错,会出现很多无关变量出现污染问题
	Character Player;
	Player.mExp = 100;

	//使用嵌套结构则不会出现
	struct Character2
	{
		//基本数据
		struct BaseData
		{
			INT mCharID;
			INT mLevel;
			CHAR mName[ 32 ];
			INT mExp;
			INT mJob;
			void Serialize()
			{
				//stream << ...
			}
		} mBaseData;

		//货币
		struct Currency
		{
			INT mCopper;
			INT mIngot;
			void Serialize()
			{
				//stream << ...
			}
		} mCurrency;

		//属性值
		struct Property
		{
			INT mSP;
			INT mPower;
			INT mHonour;
			void Serialize()
			{
				//stream << ...
			}
			void AddProperty()
			{
				//...
			}
		} mProperty;

		void Serialize()
		{
			mBaseData.Serialize();
			mCurrency.Serialize();
			mProperty.Serialize();
		}
	};

	//好处就是,在同一类型里面定义任意成员属性不会影响到其他地方,避免污染问题
	Character2 Player2;
	Player2.mBaseData.mExp = 100;
	Player2.mProperty.AddProperty();

	//还要一个天生的好处就是,可以在外部单独定义内部一组类型方便扩展
	//既有命名空间的好处也有数据类型的好处
	Character2::Currency MyCurrency = { 10000, 10000 };
	Player2.mCurrency = MyCurrency;
	return 0;
}


Player:


这还只是10个成员的情况下,现在的游戏角色动则几十上百的成员,更不敢想象污染超级严重

Player2:


更加的合理化,至少能减少出错的情况也更容易管理避免污染的情况出现。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值