C++学习方法(经典)

学习路程是->C基础->VC的环境配置->C的WIN32环境下的编程->MFC框架->高级算法.


《windows程序设计》 王艳平
《孙鑫的VC++视频 》《VC++深入详解》孙鑫
《深入浅出MFC》 
《windows核心编程》

这几本能循序渐进的



学VC++是个很艰苦而长期的过程,不能急的,而且很难在短期内见成效,还是要一步一个脚印,呵呵,建议去看看 < <编程高手箴言> > ,也许对你有些启示,其实VC++只不过是一个集成开发环境而已呀,MFC也不过是微软附带的一个类库而已,   我觉得应该这么学   
C(老谭的C,   C程序设计语言)   ->   
SDK( < <windows程序设计> > , < <windows核心编程> > )   ->   
C++( < <C++primer> > ,   < <thinking   in   C++> > ,   < <C++程序设计语言> > )   ->   
MFC( < <MFC   windows程序设计> > ,   < <VC++技术内幕> > ,   < <深入浅出MFC> > ,   < <MFC   internal> > ),

那些什么实例还是可以看看,给自己信心也不错呀,呵呵,不还是一句话,踏踏实实,以上的书网上都有下载的,   



学习c++,再学SDK,MFC,COM,COM+


如何学习VC++(VC的用处):
1 vc的用处

我感觉下面一些领域比较适合于用vc: 操作系统编程,game,图形设计,corba编程,com编程,网络编程。

我谈谈我的体会。我现在在深圳的一家公司从事IP电话网关的开发。通过这个项目,我 才真正体会到VC有多么强大,上百个线程同时工作,数据库并发访问,而且全部软件基 于COM构造,这样高性能的大型软件,只有VC方显出其英雄本色!不过,在国内,有机会 接触这样的大型系统软件的不多。而在做大型系统软件时,对VC程序员的要求就不仅仅 是熟悉VC、MFC本身了,这只是基本的要求,最的挑战是你如何运用VC实现一些高级的功能特性。

其实,VC做数据库也不是不合适,关键在于你要抛开所谓的例子程序,直接从底层(SQL)做起。那么,你会有一种天高任鸟飞的感觉:爽。数据库与界面全部在你的控制之下 。

前一段时间,做一个很大的管理系统(每个纲要540多个表12000多个数据项,纲要数不定),并且还要通过CORBA实现跨平台、通过ODBC跨数据库。如果通过什么PB、BCB、De lphi等等快速开发工具(并且做MIS是所谓强项)将会很难自由发挥的。我以为它比较适合一些需要底层控制的场合,特别是一些使用现有控件不太理想的情况下,VC的自由度就比较高。VC是把全能的瑞士军刀,不过对于一些较简单的功能,比如开酒瓶之类的用个开瓶器就更方便一些。

VC可以写WEB上的控件。
VC可以开发优秀的基于通信的程序。
VC可以开发高效灵活的文件操作程序。
VC可以开发灵活高效的数据库操作程序。等等等等
VC是编CAD软件的唯一选择!!!包括AUTOCAD,UG的二次开发。
小到只是一个Windows的标准界面 那象这样的程序用VC++确实大才小用了,因为有比VC++ 开发界面更快的编译系统,但如果这个界面极其复杂 复杂到要用很多的数学方法(例三维游戏的)那也要用到VC++才能搞定

就我使用VC++的这几年经验来看,VC++非常适合于系统程序设计,正如C语言是Unix的标准系统程序设计语言。
在多线程、网络通信、分布应用方面,VC++有不可比拟的优势。 当然随着系统程序开发的机会越来越少,VC++的应用领域的确会逐渐缩小。

如果说到Windows下的可视化开发工具现在大家接触得最多的就是VC,VB,DELPHI,BCB,一些可视化开发的JAVA。其实我觉得VC并不能完全算是一个可视化工具,这表现在VC中编写代码还是占了开发工作的大部分时间。而其他的可视化工具中都在界面设计中耗费了大量的开发时间。我一直使用VC的原因就是因为我能够一直将注意力集中在软件功能开发上而不是界面设计上。我认为这样能够在开发的过程中更加自由和有更多的控制权。而且这种情况下产生的代码维护性更强。举个简单的例子,在维护VB代码时如果没有一份详细的说明和流程就会使维护变得不可能,我想其他的基于界面开发的工具都会或多或少的产生这样的问题,因为在开发过程中开发工具将一个完整的流程分离成为多个部分,在开发完成后这些部分就很难统一起来。选择什么样的工具的前提是你的开发目标,如果你希望开发一个很大的系统你就不应该选择面向基于界面开发的工具,但你可能会选择VB来开发前端的客户软件,而后台使用VC来实现。 对于一些并不是很复杂的软件来讲,界面和操作方式可能是非常重要的,所以选择VB,CBC都可以缩短开发时间。这时候选择VC就有些不智。 所以我认为使用VC开发的朋友应该将更多的注意力集中在实现软件功能的流程上,多从整体角度看问题。我想这一点来说其他的可视化开发工具是很难达到的,因为VB,CBC等开发的程序在很大程度上都是用各种控件“堆”出来的,这会在后期的维护升级过程中带来很多的不便,例如要替换掉一个控件就可能会对整个程序的结构产生非常大的影响。 最后我想说的是每种开发工具都有它的价值,也各有优缺点,更重要的是如何根据具体的任务选择合适的工具并利用这些工具来完成工作首先要搞清楚VC能干什么.很多人只是听说VC是最好的开发语言,便去学习,就象大家听说辟邪剑谱厉害,便都去抢着学一样,都是很盲目的。其实语言并没有好坏之分,我在用C之前,一直觉的BASIC 是最好用的语言。现在在WINDOWS平台下编程,VB和DELPHI可以满足大多数的应用,而且速度不会很慢。使用VC主要是用来开发系统软件和大型工具软件以及开发游戏。

2 如何学好vc

2.1

先期条件:英语要好 看懂MSDN 要学好vc,先学好英语,再去codeguru.com之类的网站d/l source code。学好vc=英文好+基本功好+勤奋+聪明。

1先学习C或C++,在windows的console环境下编写不太深入涉及API的程序;尤其封装,继承,多态一定要精 不要让vc的各种特性分散注意力。这一阶段,可以把重心放到研究算法上.
2在基本上掌握了语法之后,开始接触简单的系统API,学习 Windows的编程原理和机制; 先了解Windows系统的消息机制(多任务,消息映射等)。一开始用基本的SDK形式来开发几个程序作为入门(WinSDK编程就是直接调用Windows的API进行编程)(SDK全称是Software Developers Kit,意思是软件开发工具箱)(API全称是application programinterface,意思是应用程序编程接口)。开始进行WinSDK编程用C语言最好,可以撇开C++的特性专心熟悉一下Win32编程的思路以及了解windows的消息运行机制。可以编写简单的菜单程序,可以简单地在WM_PAINT下操作 GDI函数当你可以熟练的使用C语言进行WINDOWS程序设计了,你可以尝试面向对象的方法了。

3用MFC来开发程序(MFC全称Microsoft Foundation Classes,是把WinAPI进行封装的类库,它是一个类的集合,通过覆盖WinAPI,为编程提供了一个面向对象的界面。它使windows程序员能够利用C++面象对象的特性进行编程,类似BCB的OWL,Delphi的VCL组件。它把那些进行SDK编程时最繁琐的部分提供给程序员,使之专注于功能的实现。你不妨把它想象成类似TC提供的函数库吧。)。开始学习MFC,可以从Step tourist学起,看MFC的 源代码,理解几个关键的宏的定义与实现,特别是MESSAGE MAP。 在学习的过程中为了给自己增加点挑战,尽量不要使用resource edit,试着自己编码实现控件的创建,消息的响应。 再就是看自己的造化了,动手做一些小工具,特别是自己平常需要的,对自己的提高也应该是很有帮助。 并选择发展的方向. 如果你有一个别人的好程序, 不妨自己跟着他的思路,从小到大自己完成一遍。

4到了一定程度,一定要学ATL,OLE/COM。需要实际项目的磨练研究OLE/COM技术。 COM
/ActiveX技术是MS的核心技术,只有彻底洞察其理论精髓才可以体会现在的操作系统的技术趋势,以不变应万变。从1998.3-1998.5,我基本上是每天攻读八小时VC,包括看书和上机。那时正上大三,精
力充沛,受的起没完没了的失败和痛苦,终于在五月某一天的一节“汇编语言”课上突然想通了,立刻逃课去上机。就这样我入门了。之后我也象大多数的人一样学习它的所谓GUI,doc/view结构,打印之类。有一天醒来我突然想:我学这些干嘛吗?朋友!惊醒呀!人的精力是有限的,正所谓“术业有专攻”,VC说到底,它也是一个工具,学会使用这个工具并不是目的,而仅仅是开始!于是我开始寻找我的方向。综合我的方向有:

1.网络编程。主要是基于TCP/IP的Winsock编程,已完成一个FTP的客户端编写,正在写一个FTP服务器。

2.通讯编程,主要是串行通讯。

3.三维动画,主要是用OpenGL API,一般用来写界面。我的毕业设计就是以2和3为基础。我的一些意见:不要对VC控件抱太大希望,除了基本控件,使用其他控件会使你比用API还繁;尽量使用MFC而不是API;尽早定位自己,寻找方向,不要什么都学,人贵专攻;要了解消息机制,多线程和同步机制,更有回叫(CallBack)机制等,这是VC程序员的基本知识WINDOWS 和 UNIX操作系统都是复杂的多任物系统,提供了一大堆应用编程接口(API,通常是C语言的函数)程序员使用c语言调用这些API便可以开发该系统下的应用程序了。这与dos时代的编程接口是不一样的,那时侯的函数库是由开发环境提供的(如Turbo C) ,不具有很好的封装性和设备无关性。每当新版的WINDOWS操作系统发行,便会提供一个相应的plantform SDK(软件开发包),开发者可以用SDK 编译C程序。vc的核心就是MFC,MFC是个C++类库,就象结构化程序设计时代的C语言函数库一样 ,给程序员提供了丰富的编程接口,简化了程序的设计。 而MFC就是直接把WINDOWS的C语言编程接口API函数用C++的类封装而成! 这样既实现了面向对象的编程思想,又直接使用了WINDOWS的原始编程接口,代码的效率是 最高的

1。Window是由个许多DLL搭起来的系统的总称,开发Window程序就是如何调用这些DLL,对于C程序员,它提供了.h/.lib,这些东西和一些文档就构成SDK,DDK。。。他们在任何支持DLL调用的开发环境中都可以使用(即函数指针)。

2。通常SDK指与Window核心

调用有关的。。。但并不是专用名称。也用于其他地方VC只是一个编程工具,就如BC、BCB、Delphi一样,其实对于编程最根本的就是三个方面,语言、开发包、操作系统API,他们三个方面应该说是相对比较独立的。VC是MS开发的,所以针对的是windows api,你可以不会C++,也可以在VC下用C写出很优秀的程序,当然如果你比较熟练C++,并且熟悉开发包MFC的话,工作可能要轻松不少。所以在我看来,学习的过程可以是这样的,1、先学习C或C++,在windows的console环境下编写不太深入涉及API的程序;2、在基本上掌握了语法之后,开始接触简单的系统API,学习Windows的编程原理和机制;3、在可以编写简单的菜单程序,可以简单地在WM_PAINT下操作GDI函数后,开始学习MFC,可以从Step tourist学起,看MFC的源代码,理解几个关键的宏的定义与实现,特别是MESSAGE MAP。在学习的过程中为了给自己增加点挑战,尽量不要使resourceedit,试着自己编码实现控件的创建,消息的响应。再就是看自己的造化了,动手做一些小工具,特别是自己平常需要的,对自己的提高也应该是很有帮助。



学习经验:
学习VC++有相当的内容要学,而最后的深度则看个人的悟性与勤奋了。
1)掌握最新标准的C++。
如果曾经在大学里自以为学过C/C++,还对dynamic_cast/static_cast/template/try/catch/throw/stl/...感到
陌生,那你该Refresh一下新的ANSI C++标准了。 ----此与VC++无甚关联,g++/bcb均有所支持。
(2个月)
2) 学习SDK编程;:-O (6个月) 痛苦是暂时的,必要的,坚持就是胜利! 建议用
Lccwin32/Masm32/Tasm编写小而精的工具软件; "Windows Programming Guide."
"Advanced Windows programming "

3) 研究MFC源代码。(6个月)
不要被一大堆的宏所蒙蔽,just track and dig into it!! 在知道MFC如何扩展,包装SDK之后,自可功
力渐进,不被其MFC系统框架所困绕。
"MFC Internals"

4) 研究OLE/COM技术。
COM/ActiveX技术是MS的核心技术,只有彻底洞察其理论精髓才可以体会现在的
操作系统的技术趋势,以不变应万变。

在此结合本人的一些经验,我再摘引本人收藏的2个经典,肯定益处多多

C++50经典

1.把C++当成一门新的语言学习(和C没啥关系!真的。);

2.看《Thinking In C++》,不要看《C++变成死相》;

3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;

4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;

5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

6.会用Visual C++,并不说明你会C++;

7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;

8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;

9.看Visual C++的书,是学不了C++语言的;

10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?

11.浮躁的人容易问:我到底该学什么;——别问,学就对了;

12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;

13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!

14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;

15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;

16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;

17.C++不仅仅是支持面向对象的程序设计语言;

18.学习编程最好的方法之一就是阅读源代码;

19.在任何时刻都不要认为自己手中的书已经足够了;

20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;

21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;

22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;

24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;

25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;

26.请看《程序设计实践》,并严格的按照其要求去做;

27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;

28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;

29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;

30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;

31.学习编程的秘诀是:编程,编程,再编程;

32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;

33.记住:面向对象技术不只是C++专有的;

34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;

35.把在书中看到的有意义的例子扩充;

36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;

37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;

38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;

39.C++语言和C++的集成开发环境要同时学习和掌握;

40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;

41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;

42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);

43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;

44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;

45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;

46.记录下在和别人交流时发现的自己忽视或不理解的知识点;

47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;

48.保存好你写过的所有的程序——那是你最好的积累之一;

49.请不要做浮躁的人;

50.请热爱C++!


曾经有一个人写了这个东西,我觉得有些道理,就贴出来吧

C++/OPP/OOD系列:
层级一:语法/语意(C++)
[Lippman2000] Essential C++
Essential C++,by Stanley B. Lippman Addison Wesley Longman 2000,276 pages
Essential C++ 中文版 ,侯俊杰 译,282页 

[Gregory95] C++:The Core Language
C++:The Core Language by Gregory Satir 1995 O'Reilly
C++语言核心,张铭泽 译 ,236页

[Deitel98] The Complete C++ Training Course
The Complete C++ Training Course 2/e by Harvey M.Deitel 1998 Prentice Hall
C++大学教程(第二版),邱仲潘等 译,816页

[Stevens2000] Standard C++ Bible
Standard C++ Bible   2000  Al Stevens   IDG
标准C++宝典,林丽闽等 译,766页

[Eckel2000] Thinking in C++
Thinking in C++ 2/e   Bruce Eckel  2000 1470 pages Prentice Hall
C++ 编程思想,刘宗田等 译,420页

[Lippman98] C++Primer
C++ Primer,3rd Editoin,by Stanley Lippman and Josee Lajoie
 Addison Wesley Longman,1998 1237 pages
C++ Primer 中文版,侯俊杰 译,1999,1237页

[Struostrup2000] The C++ Programming Language
The C++ Programming Language,Special Editoin,by Bjarne Stroustrup
 Addison Wesley Longman,2000,1017 pages
C++程序语言经典本,叶秉哲 译,儒林 1999

[ANSI C++] C++规格书 1998.9.1 PDF格式
ANSI C++ 1996 Draft


层级二:专家经验(C++/OOP)
[Meyers96] More Effective C++
More Effective C++,by Scott Meyers,Addison Wesley,1996,318pages
More Effective C++中文版,侯俊杰,培生 2000. 318页

[Meyers98] Effective C++
Effective C++,Second Edition,by Scott Meyers,Addison Wesley Longman,1998.256pages
Effective C++ 2/e 中文版,侯俊杰,培生 2000.256页

[Sutter99] Exceptional C++
Exceptional C++,by Herb Sutter,Addison Wesley Longman,2000.208pages
Exceptional C++中文版,侯俊杰,培生 2000.248页

[Sutter2001]More Exceptional C++
More Exceptional C++ by Herb Sutter,Addison Wesley Longman,2001.

层级三:底层机制(C++ Object Model)
[Ellis90] The Annotated C++ Reference Manual
The Annotated C++ Reference Manual,by Margaret A.Ellis and Bjarne Stroustrup
Addison Wesley Longman,1990,447 pages.

[Lippman96] Inside the C++ Object Model
Inside the C++ Object Model,by Stanley Lippman,Addison Wesley Longman,1996,280pages
深度探索C++物件模型,侯俊杰 译


层级四:设计观念的复用(C++/Patterns)
[Gamma95] Design Patterns:Elements of Reusable Object Oriented Software,
by Erich Gamma,Richard Helm,Ralph Johnson,and John Vlissides,Addison Wesley,1995.395pages
设计模式,李英军等译,机械工业出版社,2000.254页

[Alex2001]Modern C++ Design: Generic Programming and Design Patterns Applied
by Andrei Alexandrescu,Addison-Wesley,2001,352Paper


Genericity/STL系列:
第一个境界是使用STL:
[Josuttis99]:The C++ Standard Library -A Tutorial and Reference,by Nicolai M.Josuttis,
Addison Wesley 1999.799pages

第二个境界是了解泛型技术的内涵与STL的学理:
[Austern98]:Generic Programming and the STL -Using and Extending the C++ Standard
Template library,by Matthew H.Austern,Addison Wesley 1998.548page


第三个境界是扩充STL:
[Stepanov2001]:C++ Standard Template Library by P.J.Plauger,Alexander A.Stepanov,
Meng Lee,David R.Musser,Prentice Hall 2001

这些就是你应该看的书,如果你想成为高手。



怎样学习VC?
01-11-15 10:19  发表于:《程序员的天堂》 分类:未分类
现在,越来越多的人开始学习VC了,如果能精通VC,就象精通了九阴真经一样,可以天下无敌
了。我想很多VC爱好者都有这种追求武学至高境界的心理。
我就是抱着这种心理开始学习VC了,至今已近三年了,其间经历过无数的困惑和磨难.....
可是我最终没有放弃,到如今已经有一定的功力 :)
以下就把我修炼中获得的经验与大家分享 ,一起提升修行!
首先要搞清楚VC能干什么.很多人只是听说VC是最好的开发语言,便去学习,就象大家听说辟邪
剑谱厉害,便都去抢着学一样,都是很盲目的。其实语言并没有好坏之分,我在用C之前,一直
觉的BASIC 是最好用的语言。现在在WINDOWS平台下编程,VB和DELPHI可以满足大多数的应用
,而且速度不会很慢。使用VC主要是用来开发系统软件和大型工具软件以及开发游戏。

现在比较流行的操作系统主要是WINDOWS系列和UNIX系列。这些操作系统都是复杂的多任务系统
,在设计操作系统的时候就提供了一大堆应用编程接口(API,通常是C语言的函数),编程者
使用C语言调用这些API便可以开发该系统下的应用程序了。 这与DOS时代的 编程接口是不一样
的,那时侯的函数库是由开发环境提供的(如Turbo C) ,不具有很好的封装性和设备无关性。

每当新版的WINDOWS操作系统发行,便会提供一个相应的plantform SDK(软件开发包),开发者
可以用SDK 编译C程序。在没有VC和VB的时候,WINDOWS程序就是用SDK编出来的。

VC跟这些乱七八糟的东西有什么关系呢?

其实VC的核心就是MFC,MFC是个C++类库,就象结构化程序设计时代的C语言函数库一样 ,
给程序员提供了丰富的编程接口,简化了程序的设计。 而MFC就是直接把WINDOWS的C语言编程接
口API函数用C++的类封装而成! 这样既实现了面向对象的编程思想,又直接使用了WINDOWS的原
始编程接口,代码的效率是 最高的!

当然很多人不适应C++的编程方法,他们依然使用C语言编写WinMain()和窗口 过程,
VC同样为他们提供了很大的便利,因为VC可以很方便的管理资源和代码!

明白了以上关系,学习VC的步骤应该也明确了:首先要学习C语言(如果你还不会的话)!
这是非常重要的。如果C语言不懂的话,一切都无从谈起。懂了C语言,你就可以研究
WINDOWS系统的工作原理和WINDOWS应用程序的工作原理了。这也非常重要。VC只能用来
开发WINDOWS系列操作系统下的应用程序,如果不懂WINDOWS下的程序的工作原理就去写WINDOWS
程序,那也是比较盲目的。主要是体会一下WINDOWS的多任务和消息驱动机制。
然后就可以使用API编程了。这个过程是比较痛苦的,因为一切都变的复杂起来,你会遇到很多
新的方法和概念!比如消息队列,消息发送,窗口过程,GDI,设备上下文,句柄,线程,
消息循环,绘图对象......当你可以熟练的使用C语言进行WINDOWS程序设计了,你可以尝试
面向对象的方法了。

这时你需要学习C++语言(最好是ANSI C++),这不是浅尝则止,你要深入的理解C++语言的
精髓!经过一定的努力,你可以用面向对象的思想去考虑问题了,这时一切都水道渠成,你可以
很自然的使用MFC来编程了,有时你觉的MFC的类不好用,你可以从头作自己的类,而不去继承
MFC!


如何学习vc++(vc的用处)(2006-05-02 21:15:55)转载   

1 vc的用处
我感觉下面一些领域比较适合于用vc: 操作系统编程,game,图形设计,corba编程,com
编程,网络编程。
我谈谈我的体会。我现在在深圳的一家公司从事IP电话网关的开发。通过这个项目,我
才真正体会到VC有多么强大,上百个线程同时工作,数据库并发访问,而且全部软件基
于COM构造,这样高性能的大型软件,只有VC方显出其英雄本色!不过,在国内,有机会
接触这样的大型系统软件的不多。而在做大型系统软件时,对VC程序员的要求就不仅仅
是熟悉VC、MFC本身了,这只是基本的要求,最大的挑战是你如何运用VC实现一些高级的
功能特性。
其实,VC做数据库也不是不合适,关键在于你要抛开所谓的例子程序,直接从底层(SQ
L)做起。那么,你会有一种天高任鸟飞的感觉:爽。数据库与界面全部在你的控制之下
前一段时间,做一个很大的管理系统(每个纲要540多个表12000多个数据项,纲要数不
定),并且还要通过CORBA实现跨平台、通过ODBC跨数据库。如果通过什么PB、BCB、De
lphi等等快速开发工具(并且做MIS是所谓强项)将会很难自由发挥的。
我以为它比较适合一些需要底层控制的场合,特别是一些使用现有控件不太理想的情况
下,VC的自由度就比较高。VC是把全能的瑞士军刀,不过对于一些较简单的功能,比如
开酒瓶之类的用个开瓶器就更方便一些。
VC可以写WEB上的控件。
VC可以开发优秀的基于通信的程序。
VC可以开发高效灵活的文件操作程序。
VC可以开发灵活高效的数据库操作程序。等等等等
VC是编CAD软件的唯一选择!!!包括AUTOCAD,UG的二次开发。
小到只是一个Windows的标准界面 那象这样的程序用VC++确实大才小用了,因为有比VC
++ 开发界面更快的编译系统,但如果这个界面极其复杂 复杂到要用很多的数学方法(例
三维游戏的)那也要用到VC++才能搞定
就我使用VC++的这几年经验来看,VC++非常适合于系统程序设计,正如C语言是Unix的标
准系统程序设计语言。
在多线程、网络通信、分布应用方面,VC++有不可比拟的优势。 当然随着系统程序开发
的机会越来越少,VC++的应用领域的确会逐渐缩小。
如果说到Windows下的可视化开发工具现在大家接触得最多的就是VC,VB,DELPHI,BCB
,一些可视化开发的JAVA。其实我觉得VC并不能完全算是一个可视化工具,这表现在VC
中编写代码还是占了开发工作的大部分时间。而其他的可视化工具中都在界面设计中耗
费了大量的开发时间。我一直使用VC的原因就是因为我能够一直将注意力集中在软件功
能开发上而不是界面设计上。我认为这样能够在开发的过程中更加自由和有更多的控制
权。而且这种情况下产生的代码维护性更强。举个简单的例子,在维护VB代码时如果没
有一份详细的说明和流程就会使维护变得不可能,我想其他的基于界面开发的工具都会
或多或少的产生这样的问题,因为在开发过程中开发工具将一个完整的流程分离成为多
个部分,在开发完成后这些部分就很难统一起来。
选择什么样的工具的前提是你的开发目标,如果你希望开发一个很大的系统你就不应该
选择面向基于界面开发的工具,但你可能会选择VB来开发前端的客户软件,而后台使用
VC来实现。 对于一些并不是很复杂的软件来讲,界面和操作方式可能是非常重要的,所
以选择VB,CBC都可以缩短开发时间。这时候选择VC就有些不智。 所以我认为使用VC开
发的朋友应该将更多的注意力集中在实现软件功能的流程上,多从整体角度看问题。我
想这一点来说其他的可视化开发工具是很难达到的,因为VB,CBC等开发的程序在很大程
度上都是用各种控件“堆”出来的,这会在后期的维护升级过程中带来很多的不便,例
如要替换掉一个控件就可能会对整个程序的结构产生非常大的影响。 最后我想说的是每
种开发工具都有它的价值,也各有优缺点,更重要的是如何根据具体的任务选择合适的
工具并利用这些工具来完成工作
首先要搞清楚VC能干什么.很多人只是听说VC是最好的开发语言,便去学习,就象大家听
说辟邪剑谱厉害,便都去抢着学一样,都是很盲目的。其实语言并没有好坏之分,我在
用C之前,一直觉的BASIC 是最好用的语言。现在在WINDOWS平台下编程,VB和DELPHI可
以满足大多数的应用,而且速度不会很慢。使用VC主要是用来开发系统软件和大型工具
软件以及开发游戏。
2 如何学好vc
2.1
先期条件:英语要好 看懂MSDN 要学好vc,先学好英语,再去codeguru.com之类的网站
d/l source code。学好vc=英文好+基本功好+勤奋+聪明。
1先学习C或C++,在windows的console环境下编写不太深入涉及API的程序;尤其封装,
继承,多态一定要精 不要让vc的各种特性分散注意力。这一阶段,可以把重心放到研究
算法上
2在基本上掌握了语法之后,开始接触简单的系统API,学习 Windows的编程原理和机制
; 先了解Windows系统的消息机制(多任务,消息映射等)。一开始用基本的SDK形式来
开发几个程序作为入门(WinSDK编程就是直接调用Windows的API进行编程)(SDK全称是S
oftware Developers Kit,意思是软件开发工具箱)(API全称是application program
interface,意思是应用程序编程接口)。开始进行WinSDK编程用C语言最好,可以撇开C
++的特性专心熟悉一下Win32编程的思路以及了解windows的消息运行机制。可以编写简
单的菜单程序,可以简单地在WM_PAINT下操作 GDI函数当你可以熟练的使用C语言进行W
INDOWS程序设计了,你可以尝试面向对象的方法了。
3用MFC来开发程序(MFC全称Microsoft Foundation Classes,是把WinAPI进行封装的类
库,它是一个类的集合,通过覆盖WinAPI,为编程提供了一个面向对象的界面。它使wi
ndows程序员能够利用C++面象对象的特性进行编程,类似BCB的OWL,Delphi的VCL组件。
它把那些进行SDK编程时最繁琐的部分提供给程序员,使之专注于功能的实现。你不妨把
它想象成类似TC提供的函数库吧。)。开始学习MFC,可以从Step tourist学起,看MFC
的 源代码,理解几个关键的宏的定义与实现,特别是MESSAGE MAP。 在学习的过程中为
了给自己增加点挑战,尽量不要使用resource edit,试着自己编码实现控件的创建,消
息的响应。 再就是看自己的造化了,动手做一些小工具,特别是自己平常需要的,对自
己的提高也应该是很有帮助。 并选择发展的方向. 如果你有一个别人的好程序, 不妨
自己跟着他的思路,从小到大自己完成一遍。
4到了一定程度,一定要学ATL,OLE/COM。需要实际项目的磨练研究OLE/COM技术。 COM
/ActiveX技术是MS的核心技术,只有彻底洞察其理论精髓才可以体会现在的操作系统的
技术趋势,以不变应万变。
从1998.3-1998.5,我基本上是每天攻读八小时VC,包括看书和上机。那时正上大三,精
力充沛,受的起没完没了的失败和痛苦,终于在五月某一天的一节“汇编语言”课上突
然想通了,立刻逃课去上机。就这样我入门了。之后我也象大多数的人一样学习它的所
谓GUI,doc/view结构,打印之类。有一天醒来我突然想:我学这些干嘛吗?朋友!惊醒呀
!人的精力是有限的,正所谓“术业有专攻”,VC说到底,它也是一个工具,学会使用
这个工具并不是目的,而仅仅是开始!于是我开始寻找我的方向。综合我的方向有:1.
网络编程。主要是基于TCP/IP的Winsock编程,已完成一个FTP的客户端编写,正在写一个
FTP服务器。2.通讯编程,主要是串行通讯。3.三维动画,主要是用OpenGL API,一般用
来写界面。我的毕业设计就是以2和3为基础。我的一些意见:不要对VC控件抱太大希望
,除了基本控件,使用其他控件会使你比用API还繁;尽量使用MFC而不是API;尽早定位
自己,寻找方向,不要什么都学,人贵专攻;要了解消息机制,多线程和同步机制,更
有回叫(CallBack)机制等,这是VC程序员的基本知识
//WINDOWS 和 UNIX操作系统都是复杂的多任物系统,提供了一大堆应用编程接口(API
,通常是C语言的函数)程序员使用c语言调用这些API便可以开发该系统下//的应用程序
了。这与dos时代的编程接口是不一样的,那时侯的函数库是由开发环境提供的(如Tur
bo C) ,不具有很好的封装性和设备无关性。每当新版的//WINDOWS操作系统发行,便会
提供一个相应的plantform SDK(软件开发包),开发者可以用SDK 编译C程序。
//vc的核心就是MFC,MFC是个C++类库,就象结构化程序设计时代的C语言函数库一样 ,
给程序员提供了丰富的编程接口,简化了程序的设计。 而MFC就是直接把//WINDOWS的C
语言编程接口API函数用C++的类封装而成! 这样既实现了面向对象的编程思想,又直接
使用了WINDOWS的原始编程接口,代码的效率是 最高的
//1。Window是由个许多DLL搭起来的系统的总称,开发Window程序就是如何调用这些DL
L,对于C程序员,它提供了.h/.lib,这些东西和一些文档就构成SDK,DDK。//。。他们在
任何支持DLL调用的开发环境中都可以使用(即函数指针)。2。通常SDK指与Window核心
调用有关的。。。但并不是专用名称。也用于其他地方
//VC只是一个编程工具,就如BC、BCB、Delphi一样,其实对于编程最根本的就是三个方
面,语言、开发包、操作系统API,他们三个方面应该说是相对比较独立的//。VC是MS开
发的,所以针对的是windows api,你可以不会C++,也可以在VC下用C写出很优秀的程序
,当然如果你比较熟练C++,并且熟悉开发包MFC的话,工作//可能要轻松不少。所以在
我看来,学习的过程可以是这样的,1、先学习C或C++,在windows的console环境下编写
不太深入涉及API的程序;2、在基本上掌握了//语法之后,开始接触简单的系统API,学
习Windows的编程原理和机制;3、在可以编写简单的菜单程序,可以简单地在WM_PAINT
下操作GDI函数后,开始学习MFC//,可以从Step tourist学起,看MFC的源代码,理解几
个关键的宏的定义与实现,特别是MESSAGE MAP。在学习的过程中为了给自己增加点挑战
,尽量不要使用//resourceedit,试着自己编码实现控件的创建,消息的响应。再就是
看自己的造化了,动手做一些小工具,特别是自己平常需要的,对自己的提高也应该是很有帮助。





浅谈如何学习VC2008年06月02日 星期一 21:50引言:
     沉寂了三个多星期,一直在写这个东西。
     首先声明,我不是高手。我只学过几年VC,水平尚不及高手万分之一,但自认已经算是入门了。在此想和打算学VC却又苦于不知如何下手的朋友们聊聊如何顺利的通过入门这一关。

预备知识:
     1. VC是一门语言吗?
     VC不是一种语言,而是一种集成开发环境(IDE)。利用VC,可以把源程序编写、编译链接、调试运行等各个工作放在一块完成,很方便。如果你学过 8086汇编语言,一定会对其令人吐血的运行和调试方式印象颇深:) .那么,我们在VC里用的是什么程序设计语言呢? 是 C++。

     2.MFC是什么东东?VC和MFC有什么关系?
     常听学VC的人说起MFC,有本口碑不错的书名字就叫《深入浅出MFC》,那么MFC是什么呢?我们知道,C++是一种面向对象编程(OOP)语言,使用 别人封装好的类(Class)可以极大的加快软件开发进度。而MFC,就是MicroSoft为我们提供的一个门类齐全、功能强大的类的集合,它的全称 是:MicroSoft Foundation Class。我们平常所说的"学习VC",有一小半内容是指学习MFC的功能和使用方法。那另一大半呢?- 我不能马上告诉你,马上告诉你你印象不深:)

     3.什么是API函数?
     举个例子吧,如果让你在电脑屏幕中间打印一行字:"只要想做一件事,就一定有办法"。你会如何去做呢?在显示器上显示任何东西,本质上都是对硬件的操作, 作为一个普通的coder,不可能也没有必要去深入到硬件层来实现这个功能。幸运的是,系统给我们提供了一系列函数,只要我们用C语言的方式调用这些函 数,剩下的和硬件打交道的事情就由系统帮我们完成了。这些函数,就是传说中的API函数,全称:Application Programm Interface(应用程序接口)。在我们上面的例子中,可以先用API函数GetDC()取得桌面的DC,然后用TextOut()函数输出文字。事 实上,要想扎实的学好VC程序设计,一定要理解和掌握这些API - 这就是另一大半内容。

一、思想准备
     真是有趣,学个程序开发还要思想准备?
     我无意夸大学习VC的难度,但是VC的入门比VB之类的难很多却是不争的事实。如果你曾经3个星期搞定VB(这里指入门),那么VC可能要花三个月的时 间,这种普遍存在的学习困难差异使得很多人产生严重的挫折感甚至最终放弃。当然,具体要花多长时间和你原有的基础以及个人努力程度有关,稍后我会谈到需要 哪些知识。而现在,我只希望朋友们能有这样一个认识:VC是比较难学的,我需要做好长期学习的思想准备。


二、学习流程
     谁都希望通过最短最好走的路到达目的地,学VC的人也不例外吧?然而有一些路是注定不能绕过的,绕过它们,你的知识就会就会变成无根之草,你就会在接下来的学习中举步唯艰。下面顺次列出学习VC所需要掌握的知识:

     1. C++程序设计基础

     2. Windows程序设计

     3. MFC的学习和使用

     如果你看到这里觉得有畏难情绪,请把"一、思想准备"再读一遍。
     让我来解释一下这三个知识点的关系。


     学VC必须要有C++的基础。不会C++而能学会VC纯属扯淡。说到这里我想调侃一下自己,因为我在上大二的时候曾经一时冲动要学VC,去图书馆借了几本 书回来硬着头皮啃了半个多月,仍然一头雾水不知书中所云,遂放弃。现在回想起来,书写的比较烂固然是没有学成VC的一个原因,但关键是自己基础不够--除 了VB啥都不懂,连"::"是什么意思都不知道,呵呵见笑了。所以如果你现在还不懂得C++,请务必学C++先。
     如果时间紧迫的话,也可以速成:至少应该搞明白面向对象编程的基本概念,比如类/对象/继承/重载 等等。
推荐书目:利普曼 加.劳乔 著 潘爱民译 《C++ Primer 》、钱能的《C++程序设计教程》也不错。



         有了C++的基础后,接着应该学习的是windows程序设计。这个部分主要是在了解消息机制的基础上学习大量API函数的使用。首先你需要理解 windows程序的事件驱动机制,然后就是花大量的时间来学习系统提供的API函数,并且使用它们进行简单的可视化编程。API函数成千上万,但是也不 用有畏难情绪,只要把常用的百十个函数会用就行了。这个部分要占去你VC计划中的大部分时间-同时回报也是相当显著的,当你下大力气学好了这个部分,你会 发现接下来MFC部分的基础知识很容易学。
    注意:有不少人畏惧这部分的学习而选择跳过去直接学习MFC,对此我的看法是:不可取。当 你没有学会走路时,不要跑,否则往往会摔的很惨。侯俊杰先生说的”勿在浮沙筑高台“也是这个道理。而事实上当你潜心把这部分学好后,你会发现MFC的入门 根本就不需要花什么时间。世上很多事情是需要水到渠成的,当你付出足够的努力往往就可以做成一件事(技术的事情尤其如此),不需要刻意去找什么捷径,古人 说“大巧无巧术, 用巧者乃所以为拙”,真正的捷径就是不找捷径。
     推荐书目:Petzold 的《widnows程序设计》,有中文版的。为什么我只推荐这一本?因为它实在太经典了,一本足矣。

     当你终于学会了windows程序设计这个部分,请允许我提前恭喜你,你马上就要成功了。这时候再来看MFC,你难免会有这样的感觉:哈哈,这不就是对 API函数的封装么?诚然,对于初学者来说,无非是用MFC建立个对话框或者单文档程序,里面放几个控件而已,而对控件的操作很大程度上都是用API函 数,不同的是,这些函数被MFC封装了一下,用起来似乎更简单一些。
推荐书目:《VC++技术内幕》、《深入浅出MFC》
     值得一提的是,关于MFC的学习,网上有一个非常好的视频教程,是 孙鑫 讲的。我看过,觉得他讲的确实很好,能把前10课看完就算入门了。该视频共20课,有2.2GB之大,大家有兴趣的话可以买盘或者用BT、电驴之类的下 载,一个字:值。

    到此为止,你已经掌握了使用API函数和MFC进行简单可视化程序的开发,稍加训练做个简单的数据库或者网络的程序应该不成问题了。万里长征已经顺利的迈出了第一步,恭喜你!

三、问答(FAQs)

     问:我不会c语言,有关系吗?
     答:没关系。你按照【学习流程】中说的123学就行。

     问:我该装哪个版本的VC?
     答:版本并不重要, 就像你吃饭时先吃哪道菜一样. IDE的使用,一通百通。如果你实在没有主意非要我推荐的话, 那就装VC++6.0吧,最好是英文版的.

     问:C++ 和 windows程序设计的学习可以用VC进行编译调试吗?
     答: 当然可以。具体方法网上找,相当简单。

     问:VC的代码量太大,一个最简单的窗口都要百十行代码。不好办啊?
     答:VC就这个样,习惯了就好了。简易和灵活是天生的矛盾,VC偏向于后者。

     问:什么是MSDN?我要不要安装MSDN?
     答:你可以把MSDN简单的理解为一种函数参考手册。对于VC程序员来说,没有MSDN是不可想象的。

     问:API函数和宏定义太多太难记,我该怎么办?
     答:高中化学的原子量多不多?难不难记?但我相信当年很多人都记得常用元素的原子量。为什么?练的多自然就记住了,别亦无它,唯手熟而。

     问:我学VC好一阵子了,觉得VC太难了,我该怎么办?
     答:谢谢, 这是我所遇到的最容易回答的问题:坚持,或者放弃。

     问:如果用一句话来概括学好VC的关键方法,那是什么?
     答:亲手写代码, 从最最简单的程序开始, 编程、编程、再编程。

四、 结束语
     这篇文章删删改改写了好多天,但我仍然觉得不是很满意,毕竟理工科出身的河蚌很难像文科河蚌那样修出光彩夺目的珍珠。如果大家觉得哪些地方说的不清楚或者还有哪些需要说明,欢迎给我留言。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值