以下是我个人的看法。也许并不是很完善,欢迎评论,请勿喷
自己写的一个结构体或者一个类,可能属性多如狗,方法遍地走。看起来,找起来都甚累。这个时候我们可以分级、拆分。有两种方式。一种是分级。也就是在自己的类、结构体里嵌套结构体。举个例子:
struct ShuXingDuoRuGou
{
float x;
float y;
float z;
string strName;
unsigned int isDone;
....
};
分级之后就是这样:
struct ShuXingDuoRuGou
{
struct
{
float x;
float y;
float z;
}Size;
string name;
unsigned int isDone;
....
}
这样搞有什么好处呢?写这个类的时候,思路很清晰,但也许更加麻烦了。但是调用这个类/结构体的时候,我们就可以方便和轻松得多。
ShuXingDuoRuGou likedog;
likedog.size.x,很清晰。而
likedog.x,也许会分不清这个x是位移,旋转角还是缩放比。
我写的时候比较习惯于函数和类首字母大写,而变量首字母小写。所以 x 也许反而比 m_fx 更加直接,看起来更方便。
另外一种方法,可以拆分。即,把 Size 单独拿出去,而在 ShuXingDuoRuGou 中,放一个 Size 型链表(C++中被包含在<list>,当然用<map><set>等也可以,有些时候更加方便。C#中可以用 IList(链表) 或 IDictionary(键值对))。这样的好处是
1. Size可以单独的管理,更加清晰。
2. ShuXingDuoRuGou 里可以放很多个Size。
3. Size 可以通用,别的类/结构体也可以用。Size 就成了一个通用的属性。
这里的 Size 比较小,也没有通用的需求,所以没必要拿出来。如果 Size 属性比较大,又有通用的要求,单独拿出来比较好。
关于变量命名,我是和别人学的。比如
srring strName;
看见这个变量名字,我们就知道它的类型是 str ,并且存的是 Name 。这样写极大的清晰了我们的思路。
附录1:
class CClass
{};
CClass c;
IDictionary <int, CClass> a = new Dictionary<int, CClass>()://这是一个多态
Dictionary[0] = c; //0 对应 int,c 对应 CClass
CClass b = (CClass)a[0]; //取出
附录2:
#include "stdafx.h"
#include <map>
using namespace std;
class CClass
{
int a;
public:
void func()
{
printf("老子来了!\n");
return;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
map<int, CClass> Map;
map<int, CClass>::iterator itrMap = Map.begin();
Map[0] = *(new CClass());
Map[0].func();
return 0;
}