龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

接触VC之二:MFC类基础,C++程序编写规范介绍(3)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
#include iostream.h#include string.hclass Aves{ public: Aves (); ~Aves (); virtual void tweet(); virtual void run(); virtual void fly(); char m_strHead[10]; char m_strTrunk[10]; char m_strCrura[10]; ch
#include <iostream.h>#include <string.h>class Aves{   public:    Aves ();    ~Aves ();    virtual void tweet();    virtual void run();    virtual void fly();    char m_strHead[10];    char m_strTrunk[10];    char m_strCrura[10];    char m_strWing[10];protected:    char m_strBowels[10];};Aves::Aves(){    strcpy(m_strHead, "Head");    strcpy(m_strTrunk, "Trunk");    strcpy(m_strCrura, "Crura");    strcpy(m_strWing, "Wing");    strcpy(m_strBowels, "Bowels");    cout<<"a bird born!"<<endl;}Aves::~Aves(){    cout<<"a bird die!"<<endl;}void Aves::tweet(){    cout<<"jijijijijijiji"<<endl;}void Aves::run(){    cout<<"I can run by "<<m_strCrura<<endl;}void Aves::fly(){    cout<<"I can fly by "<<m_strWing<<endl;}class Ostrich : public Aves{public:    void tweet();    void fly();};void Ostrich::tweet(){    cout<<"gugugugugugugu"<<endl;}void Ostrich::fly(){    cout<<"I can''t fly by "<<m_strWing<<endl;}void main(){    {         Aves bird;         bird.fly();         bird.run();         bird.tweet();    }    cout <<"====================="<<endl;    {         Ostrich aOstrich;         aOstrich.fly();         aOstrich.run();         aOstrich.tweet();         Aves *lpBird;         lpBird = &aOstrich;             lpBird->fly();    }}关于虚函数更具体的情况,请参看vckbase第12期的《解析动态联编》。关于其它C++语法,请自行查看C++教材。 那么MFC类呢?简单地来说,MFC类只是将许多有关联的API函数将其封装在一起。在WinSDK中WinAPI都是一些零零散散的函数,它们大部分中都会有一个参数是它的服务对象的句柄。比如,CreateWindow函数会需要一个句柄输出来返回一个窗口句柄来表达其建立的窗口对象,ShowWindow函数需要一个窗口句柄来指定哪一个窗口要改变显示状态,CloseWindow函数需要一个窗口句柄来指定哪一个窗口要被关闭。可以理解为是句柄在围绕着函数转,句柄在以函数为中心。而MFC是将几个若干有服务关联的函数封装在一起成为成员函数,每一个类会有一个保护的句柄成员变量来保存当前类对象所代表的服务对象,在对外调用上看就可以将其类对象看成其服务对象,这些成员函数就可以看成其服务对象本来固有的方法。在使用上比使用WinAPI更为形象和理解。下面做一个比照的例子.

  SDK写法

  HWND hCurrentWnd;hCurrentWnd = ::CreateWindow (...);::ShowWindow(hCurrent,SW_SHOW);::CloseWindow(hCurrent);MFC写法

CWnd CurrentWnd;CurrentWnd.CreateWindow (…);CurrentWnd.ShowWindow (SW_SHOW);CurrentWnd.CloseWindow();怎么样,MFC没有枯燥零碎的句柄的概念。我们足可以想象成一个类对象就是一个服务对象,它本身有许多对其控制的方法。这就是制作MFC的主要目的。 所有的MFC类的基类是CObject的。你可以用CObject的指针指代所有MFC类。CWnd类是所有关于窗口的API函数进行了封装。所有的控件都是派生于这个类的如CEdit,CButton,CDialog, CFrameWnd, CMDIFrameWnd, CMDIChildWnd, CView, CDialog等 MFC更深的理论比如消息映射,CRuntimeClass等在《深入浅出MFC》,《C++技术内幕》等书有详细探讨与讲解,强力推荐。我就是看这几本书入的门。MFC类的各个功能也参见MSDN。 下一部分将详细解释一个MFC对话框程序。 下面,我要介绍一下一些C++程序建议编写规范。

  一、变、常、参量的建议:

  1.常、变量应当定义函数体最前面或一对大括号的最前面,全局常、变量就当放在整个文件的最前面。这样便于管理与维护。

  2.声明变、参量的应当使用匈牙利命名法。为变、参量添加适当的前缀,并以有意义的可拼读的名词性英文单词来命名,每个英文语素首字母都应当大写。如: m_nCount;则表示这是一个类的成员,为整型,是用做计数器用的。 常用的前缀有:

  前缀      表示内容
  _或Afx     表示为全局
  m_        表示为某个类的成员
  b        表示为布尔型 
  h        表示为句柄 
  c或ch      表示为字符型
  l        表示为长型
  clr       表示为32位颜色值
  n        表示为整型
  cx或cy      表示为坐标的水平或垂直值
  p或lp      表示为指针
  w        表示为字(WORD)型
  sz        表示为以0结尾的字符串
  str       表示为CString字符型 
  dw        表示为双字(DWORD)型 

3.常量应当用const来定义,而不是用预处理指令#define。并且常量名应当大写。

4.如果是全局的常、变量应当加前缀_。

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接