VSUAL C++学习心得谈

类别:编程语言 点击:0 评论:0 推荐:

关于MS VSUAL C++ 的讨论

           ——VSUAL C++学习心得谈

万事开头难,尤其对于C++:C++语言本身的技术问题是其一,MFC庞大的类库的命名规则是其二,熟知的WINDOWS程序的基本动作统统不见了是其三,物件到向观念与application framework的包装是其四。刚进入VSUAL C++的殿堂,我的脑袋犹如网目过大的筛子,什么东西都留不住;各个类别极其代表意义,过眼即忘;众多全局变量、全局函数、无参宏使我头晕眼花。

过程愈艰辛,宝石愈璀璨。在此,写下我的感言,希望大家给予指正。

一、这是我的真实感受:

        首先,关于程序的“调试”:我开始越来越深刻的感到程序的调试在程序设计中分量,从最初的DEPHI中走过来,我对调试工作的认识开始转变:一个几十行的程序也许不会用到调试这个字眼,尤其在驾轻就熟的DEPHI时代,我感到调试只是一种附庸于编辑和编译的小工具,因为错误很少发生,而且会被轻易解决;走近了C++和数百千行程序的编写,我开始感到调试工作艰辛和不可逾越,没有任何其他方法能让你从毫无头绪的冗长程序中看到错误的端倪,唯有调试它,WATCH它,STEP BY STEP。

       第二,关于“帮助”:DEPHI时代的帮助是我最好的朋友,没有他,我几乎是寸步难移,进退维谷。但是到了VSUAL C++,我发现帮助好象再也不是写给我们初学者看的了,冗长的宏名,众多的参数,“深奥的ENGLISH”,你甚至想不停在“HELP”中再按下“F1”。

       还有什么呢?我想想:我想凭我对VSUAL C++的菲薄认识中来对比一下DEPHI和VSUAL C++,请老师多多指正:

      首先应该指出的是二者都能相互生成对方的OBJECT文件。

       ⑴编译器方面:我个人一直认为BORLAND公司的编译器是独占鳌头的,BORLAND一直就拥有全世界最好的编译器开发组(虽然ANDERS HEJLSBERG离开了)。VSUAL C++容易给人一种程序短小虚假的表象,那多半是因为.DLL的原因。举个例子,比如MDI的例程:在DELPHI中选NEW ... | PROJECES |MDI APPLICATION,在VSUAL C++中用MDI APP WIZARD;生成的程序功能是非常类似的。下面是比较结果:

 (DEPHI打开优化,VSUAL C++使用最小代码优化)

              DEPHI 6  VSUAL C++ 6.0

DYNAMIC LINK  46.5K       112K

STATIC LINK   477K        2.04M

      ⑵语法说明:a多重继承性:OBJECT PASCAL不支持多重继承,OBJECT PASCAL通过接口(INTERFACE)实现多重继承。INTERFACE不仅可以引入用OBJECT PASCAL实现的对象,也可以引入其他语言实现的对象,VCL没有用到多重继承。C++当然不用说了!b对象模板:OBJECT PASCAL不支持对象模板。因为对象模板是宏的语言实现。c重载:OBJECT PASCAL支持函数/过程的重载,不支持运算符重载。C++全部支持。

       ⑶实现风格上:C++更强调灵活性,而OBJECT PASCAL更注重整洁和优美。

       ⑷使用范围上:a一般意义上DELPHI好象不能编驱动,VSUAL C++几乎能做任何硬件允许的工作;b在数据库的开发上,DELPHI更胜一筹;

       ⑸应用框架上:VCL较之MFC在技术上更加领先,在易使用性上更是一个在天上一个在地下,MFC是以较低阶的方式封装WINDOWS API,并不是很对象导向,这是历史遗留问题了!

二、MS VSUAL C++的机制:

      我只能从我目前对VSUAL C++的粗浅认识来谈谈进行VSUAL C++程序设计所应知道的基本机制,姑且分成这几个方面(如果有注意,在此我曾经发过一些关于MFC的东西):

      ⑴WINDOWS程序的执行过程:

       程序初始化过程调用CREATEWINDOW,为程序建立一个窗口,作为程序的屏幕舞台,CERATEWINDOW产生窗口之后送出WM_CREATE直接给窗口函数,后者于是可以在此时做些初始化操作(配置文件、打开文件、读初始数据……);在程序存在的过程中,不断以       GetMessage从消息队列中抓取消息;如果这个消息是WM_QUIT,GetMessage会传回0而结束WHILE循环,从而结束整个程序DispatchMessage通过Windows USER模块的协助与监督,把消息分派至窗口函数,消息将在该处被判别并执行;程序不过进行前诉两步;当使用者按下系统菜单中Close命令时,系统送出WM_CLOSE后,通常凶横许的 窗口函数不拦截此消息,而由DefWindowProc处理它,DefWindowProc受到调用WM_CLOSE后,调用DestroyWindow把窗口清除,DestroyWindow本身又会送出WM_DESTROY;程序对WM_DESTROY的标准反映是调有PostQuitMessage;PostQuitMessage没什么其他操作,就只是送出WM_QUIT消息,准备让消息循环中GetMessage取得,结束消息循环。

 ⑵APPLICATION FTAMEWORK运用:

 APPLICATION FTAMEWORK已成为PC平台上软件开发的主流工具,他减低了我们花在浩瀚的WINDOWS API的时间,带来了面向对象程序设计观念和方法上的革命,使我们能够在一群优秀的工程师的努力心血上,继承其成果而开发自己的程序。其中OWL和MFC是其中的佼佼者。与APPLICATION FTAMEWORK具有相近的封装WINDOWS API功能的工具还有CLASS LIBRARY以及GUI TOOLKIT,但他们都不及APPLICATION FTAMEWORK在规模上的巨大,更没有APPLICATION FTAMEWORK的定位那么高级宏观,他们只是“一组具备面向对象性质的类,他们最多只能让应用程序实现起来容易一些而已,这些功能诸如数值运算、数据结构、绘图、内存管理等等,这些类只能一片一片毫无瓜葛地并入应用程序”,而APPLICATION FTAMEWORK这是一个完整的程序模型,具备标准应用软件所须的一切基本功能,这些功能在APPLICATION FTAMEWORK紧密整合下,形成一个无间的对象结构大模型。

⑶VISUAL C++程序的来龙去脉:于⑴中关于WINDOWS SDK程序的执行过程相似,MFC中也有起进入、执行、结束的过程,并且二者有着相近之处,只是因为MFC本来就是对WINDOWS APIS的封装,但是较之WIN32程序有头有尾,头尾分明,MFC的程序显得更加难于琢磨、似乎隐晦难懂,其实MFC的程序流程是如此的分明。在RAW WINDOWS API程序的流程是这样:WINMIAN -àREGISTERCLASSàCREATEWINDOWàGETMESSAGE/DISPATCHMESSAGEàWINDOW PROCDDUREàAPIS;而在MFC中的程序流程是:CWINAPP取代了WINMAIN的地位,代表程序的本体,CFRAMEWND代表一个主窗口;从程序的头文件也可与看出一些端倪:STDAFX.H中载入AFXWIN.H,AFXWIN.H中内含AFX.H,AFX.H中又载入了AFXVER_.H,

而AFXVER_.H又载入了AFXV_W32.H,后者又载入了WINDOWS.H,这正是SDK程序需要载入的。

     ⑷消息映射机制:a、消息分类:WM_COMMAND,这是有UI(用户接口)长生的消息,可能来自菜单或加速键或工具栏按键,被CCMDTARGET的派生类接受;标准消息,除WM_COMMAND之外的任何以WM_开头的都算是这一类,被CWND类接受;CONTROL NOTIFICATION,这是有控件产生,被其父窗口接受,通知某种情况。b、消息分派机制:取代了GETMESSAGE/DISPATCHMESSAGE,VISUAL C++中的消息分派由各个类中的定义宏实现,他们是DECLARE_MESSAGE_MAP()、BEGIN_MESSAGE_MAP(类1,类1的父类),END_MESSAGE_MAP(),这三个宏的定义在AFXWIN.H中,由于篇幅和时间所限,我只摘录了一个表征次数据结构的图形,如图。以MESSAGEMAP结构类型联系了本类的消息函数,同时关联了其父类的MESSAGEMAP,从而形成了一个巨大的消息网。

三、善于学习,做一个好的程序员:

⑴我想,程序员不应过多的依赖于开发工具,程序员更应该拥有的是一种思维、一种精神、一种观念。就像Richard.M.Stallman一样,有自己的精神,为自由软件而奋斗。就像求伯君,为民族软件的振兴而奋斗。这才是真正的程序员。

⑵程序员写的程序不是算法+语法 ,而是要能够满足用户需求的工具,要想达到用户需求就必须从各个方面来考虑如业务、人机交互 、效率等方面,而不只是一个语言(语法)的问题,语言(语法)只是工具,只知语法不知其他那是编程机器

⑶学习VC必须有狂热的编程热情,否则是很难坚持下来的,要学VC,必须有对C++深刻的理解,对WINDOWS运行机制的深刻理解。尤其是那些想成为VC高手者。我曾经看到一位编程的对于VC的学习经验,先摘录下来:

1.  技术为本,语言为次.

2.  MFC的单个类有用,DOC/VIEW要小心。

3.  OOP要小心,使用不当反而造成大量的工作和糟糕的代码。

4.  如果可能,考虑选择使用Delphi(CBuilder+VCL)。

5.  到了一定程度,一定要学COM。

四、结语:

最后也摘录他关于学习VSUAL C++的过程的话作为结语:VSUAL C++就像《倚天屠龙记》里的倚天剑,是个宝物, 但是学却很难,VSUAL C++高手是稀有动物!

1 看C++语法的书,知道类的概念。

2 翻vc入门教程,熟悉开发环境和常用界面mfc类 。

3 写小游戏,不懂得地方参照例子(msdn),目标:培养必要的技巧性。

4 写通信类小程序,到网上找这方面例子,目标:熟悉底层特性。

5 成为vc高手。

语言没有好坏之分 有的语言写出的程序,结构严谨,执行速度快,错误率低,体积小 但是,牺牲的就是时间,开发周期太长,在现今的这个讲求效率的社会中,显然 有点儿不合时宜 而有的语言虽然执行速度较慢,体积庞大,错误率高,结构也不严谨 但是其开发周期短,总之一句话,学好了,用什么都一样!

           总字数:纯文字3012 ;字符数:4427

本文地址:http://com.8s8s.com/it/it26051.htm