当前位置:C++技术网 > 资讯 > 属性拆分,变量命名

属性拆分,变量命名

更新时间:2015-06-27 19:12:42浏览次数:1+次

    以下是我个人的看法。也许并不是很完善,欢迎评论,请勿喷

    自己写的一个结构体或者一个类,可能属性多如狗,方法遍地走。看起来,找起来都甚累。这个时候我们可以分级、拆分。有两种方式。一种是分级。也就是在自己的类、结构体里嵌套结构体。举个例子:

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;
 }