《风格设计与实现》由会员分享,可在线阅读,更多相关《风格设计与实现(22页珍藏版)》请在金锄头文库上搜索。
1、风格、设计与实现风格、设计与实现风格、设计与实现风格、设计与实现高壮 2007.10class class 风格风格 private:private: MyTypeMyType 命名;命名; MyTypeMyType 语句;语句; MyTypeMyType 注释;注释; MyTypeMyType 文档;文档; MyTypeMyType 参考文献;参考文献; public:public: 风格风格();(); 风格风格();(); ;风格风格风格风格. .风格风格风格风格() ()额外的工作量为了减少工作量额外的工作量为了减少工作量额外的工作量为了减少工作量额外的工作量为了减少工作量? ?So
2、it is a tradeoffSo it is a tradeoff! Good PointsGood Points:? ?阅读别人的代码方便;阅读别人的代码方便;? ?自己的代码适合别人学习,别人自己的代码适合别人学习,别人=?=?=几个月或者几个月或者 几年后的自己。几年后的自己。 Bad PointBad Point:? ?风格要付出额外的劳动风格要付出额外的劳动增加输入量;增加输入量;? ?人们经常忽略风格,或者不能达成共识;人们经常忽略风格,或者不能达成共识;? ?没有风格有利于代码的保密没有风格有利于代码的保密?风格风格风格风格. .风格风格风格风格() ()我们必须培养良好的代
3、码风格:我们必须培养良好的代码风格:? ?现在处于学习阶段,不能太懒;现在处于学习阶段,不能太懒;? ?团队合作要求统一的风格;团队合作要求统一的风格;? ?从最切身的利益讲:有利于助教或者老师从最切身的利益讲:有利于助教或者老师 批改;批改;所以我们的代码需要风格所以我们的代码需要风格风格风格风格风格. .风格风格风格风格() ()两个程序片段:两个程序片段:? ?intint main()main()? ? ? ?intint qqqq, i, j, tot, pre; , i, j, tot, pre; -qq,totqq,tot是什么?是什么?? ?scanf(“%dscanf(“%d
4、“, );? ?while (while (- -qqqq = 0)= 0)? ? ? ?memset(stockmemset(stock, 0, , 0, sizeof(stocksizeof(stock););? ?scanf(“%d%dscanf(“%d%d“, “, ? ?max = 0; max = 0; -maxmax,minmin哪里来的?哪里来的?? ?min = 10;min = 10;? ?tot = 0;tot = 0;? ?for (i = 0; i max) max = j;if (j max) max = j;? ?if (j totalSizetotalSize
5、| | leftTop.second+pieceSizepieceleftTop.second+pieceSizepiecetotalSizetotalSize) )? ?return false;return false;? ?for(intfor(int row=row=leftTop.first;rowleftTop.first;rowcaseNumcaseNum; ;? ?Case Case cutCakecutCake; ;? ?while(caseNumwhile(caseNum- -)0)0)? ? ? ?cutCake.InputcutCake.Input();();? ?cu
6、tCake.OutputcutCake.Output();();? ? ? ? 风格风格风格风格. .命名命名命名命名? ?命名是程序风格中最重要的部分,也是初命名是程序风格中最重要的部分,也是初 学者最容易忽略(甚至不屑)的部分。学者最容易忽略(甚至不屑)的部分。? ?一个好的变量命名应该满足:一个好的变量命名应该满足:a) a)词能达意:词能达意: COORDINATE COORDINATE leftTopleftTopb)b)表明身份:变量?函数?全局?局部?常表明身份:变量?函数?全局?局部?常 量?类?宏?量?类?宏?c) c)存储类型:存储类型:intint?floatfloat?
7、charchar?风格风格风格风格. .命名命名命名命名? ?词能达意:词能达意: ” ”获得字符串的长度获得字符串的长度“ “的函数,下面两个名称:的函数,下面两个名称: hdzfcdcdhdzfcdcd()() getLengthgetLength()() 孰优孰劣,一目了然!孰优孰劣,一目了然!*这里我们不提倡这里我们不提倡“ “爱国爱国” ”,不要用拼音,尤其,不要用拼音,尤其 是拼音首字母组合是拼音首字母组合*风格风格风格风格. .命名命名命名命名? ?表明身份:表明身份:? ?variablevariable:局部变量:局部变量? ?g_variableg_variable: :全
8、局变量全局变量? ?m_variablem_variable: :成员变量成员变量? ?doSomethingdoSomething():():函数函数? ?CONSTANT_VARIABLECONSTANT_VARIABLE:常量:常量? ?ClassNameClassName:类:类? ?MACRO():MACRO():宏宏? ?g_pVertexg_pVertex: :全局变量,并且是指向顶点的指针全局变量,并且是指向顶点的指针风格风格风格风格. .命名命名命名命名? ?存储类型(匈牙利命名法):存储类型(匈牙利命名法):? ?Char Char chGradechGrade? ?BOO
9、L BOOL bEnablebEnable? ?IntInt nLengthnLength? ?WORD WORD wPoswPos? ?LONG LONG lOffsetlOffset? ?DWORD DWORD dwRangedwRange? ?指针指针 pDocpDoc? ?远指针远指针 lpszNamelpszName? ?3232位字符串指针位字符串指针 lpszNamelpszName? ?3232位常量字符串指针位常量字符串指针 lpszNamelpszName? ?WindowsWindows对象句柄对象句柄 hWndhWnd风格风格风格风格. .命名命名命名命名? ?clas
10、s class CMainFrameCMainFrame : public : public CMDIFrameWndCMDIFrameWnd-.net 2003向导自动生成的向导自动生成的CMainFrameCMainFrame类类? ? ? ?DECLARE_DYNAMIC(CMainFrameDECLARE_DYNAMIC(CMainFrame) )? ?public:public:? ?CMainFrameCMainFrame();();? ?public:public:? ?virtual BOOL virtual BOOL PreCreateWindow(CREATESTRUCT
11、PreCreateWindow(CREATESTRUCT );? ?public:public:? ?virtual virtual CMainFrameCMainFrame();();? ?# #ifdefifdef _DEBUG_DEBUG? ?virtual void virtual void AssertValidAssertValid() const;() const;? ?virtual void virtual void Dump(CDumpContextDump(CDumpContext? ?# #endifendif? ?protected: / protected: / 控
12、件条嵌入成员控件条嵌入成员? ?CStatusBarCStatusBar m_wndStatusBarm_wndStatusBar; ;? ?CToolBarCToolBarm_wndToolBarm_wndToolBar; ;? ?protected:protected:? ?afx_msgafx_msg intint OnCreate(LPCREATESTRUCTOnCreate(LPCREATESTRUCT lpCreateStructlpCreateStruct); );? ?DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()? ?; ;-有什么不同?
13、不统一的风格有什么不同?不统一的风格NONO风格风格风格风格. .语句语句语句语句? ?语句的风格主要包括语句的风格主要包括: : 缩进:缩进:-这个大家都做的很好!这个大家都做的很好! 空格:空格:intint b = a + c; b = a + c; vsvs intint b=a + c;b=a + c;空行:空行:? ?文件中的主要部分要用空行分开文件中的主要部分要用空行分开? ?连续的两个多行定义之间用空行隔开连续的两个多行定义之间用空行隔开? ?多行定义和其他代码之间应该用空行隔开多行定义和其他代码之间应该用空行隔开? ?块局部变量和代码之间用空行分开块局部变量和代码之间用空行分
14、开风格风格风格风格. .语句语句语句语句不要滥用空格不要滥用空格? ?不要在单目运算符和其操作对象间加空格比不要在单目运算符和其操作对象间加空格比 如:如:! !a,+aa,+a sizeofsizeof ( (strstr); = ); = sizeof(strsizeof(str); ); ( (intint) ) a+ba+b= (= (int)a+bint)a+b 不要在引用操作符不要在引用操作符 . . - - 前后加空格前后加空格 a i = a i = aiai pNodepNode - - leftTreeleftTree!=0; = !=0; = pNodepNode- - leftTreeleftTree!=0;!=0;风格风格风格风格. .语句语句语句语句? ?少用具有二义性或者很难理解的语句:少用具有二义性或者很难理解的语句: i+ii+i; ; straistrai+ = + = strbistrbi+ = + = ; ; child=(!LC!LC?RC:LC); subkeysubkey= =subkeysubkey(bitoffbitoff- -(bitoff(bitoff3)3)3);? ?不要吝啬括号不要吝啬括号 while(while( (c c= =ge