C和C++的学习过程总结

总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。

  一家之言,欢迎拍砖哈。

  1、可以考虑先学习C.

  大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。

  C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。

  毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。

  因此,想要学习好C++,我的建议,先学习C,先学解决问题的能力,再讨论解决大问题的能力。就是先学习怎么走路,再学习怎么跑步。

  2、学习C的过程中,一定要理解结构化编程思维。

  为什么呢,我前面有文章说过,软件语言的发展过程,就是一个数据私有化的过程,大型工程应用,强调高内聚,低耦合,模块化设计,保持代码最大的灵活性和安全性。

  这是现代工程化开发的核心和灵魂。

  因此,利用C这门语言入门,借此理解结构化开发思维,可以说是个很方便的路子。因为C的函数,本来就是为重用做准备的。同时,全局变量和cpp内部私有变量的差别,其使用原则,这些都能学到很多结构化开发思维。

  3、开始学习C++

  C++不难学的,很多人觉得C++难学,其实是因为它在C之外,又提供了很多的概念,尤其是对象,很难以理解。

  不过我经过这么多年,把这个问题反而看淡了,我认为面向对象相对面向过程,仅仅是结构化程序设计的一个具体体现,是编译器提供手段,强迫程序员必须遵循数据私有化的一个实例,C++和C的关系,最核心的莫过于此。

  现在我们回到C再看看,如果我们把一个全局变量,写到一个cpp里面,并且在对应的h文件中不声明,它是不是就只有这个模块可以使用?它是不是就是私有变量,以这个理解,类能明白了吗?

  4、学习C++的深入技巧

  C++在类的基础上,经过这么多年的发展,其实提供了很多深入的概念,看起来很复杂,其实我看也很简单。比如模板,我的理解就是“类的类”,大家说是不是?

  既然模板理解了,STL,ATL这些,静态模板库,动态模板库,还难理解吗?就是一大堆类的类,可以借此实现很多应用中需要的类,不需要程序员再自己写而已。

  ok,STL都理解了,泛型开发还难吗?所谓泛型开发,其实就是我做一个模板,来定义一套算法规则,但是呢,我希望这个算法规则,能进一步抽象,对核心数据类型不要限死,我把各种数据套进去,都可以用,这样,仅算法这部分,我不需要重写了。你想想是不是这个道理?

  学到这里,C++和C,其实已经差不多了。再学语言,就是求全责备,过于钻牛角尖了。

  5、学习应用开发

  前面说了,学习语言,目的不是让别人认为自己是专家,是为了写程序赚钱。因此,语言学完,要学习应用开发。

  什么叫应用开发呢,我会一门语言,但是,客户不懂,客户说的很直接,在Windows下给我写个程序,我要什么什么功能。为啥Windows呢?因为我习惯。

  OK,很多时候,应用开发要尊重客户习惯,一般说来,语言这个东东,还是要结合具体平台的开发,才能开发出有意义的应用程序卖钱。那么,一般说来,客户端是Windows系统,服务器是Linux,这些都是行业习惯,嵌入式不好说,各种平台都有,Palm,S60,Linux,WinCE,等等。要根据自己的目标客户来定。

  当我们选定目标平台后,有一个问题,选什么语言,很多时候,学生和商用程序员差别就在这里,学生一般没得选,自己会啥就用啥呗,企业里的程序员不会,要先评估需求,看哪个语言更合适,不会的语言,要去学。

  ok,假定我们选了C和C++,那么,我们需要选择开发平台,Windows下不用说了,VC,这是最好用的,Linux下呢,gcc,其他的也差不多。

  假如我们开发VC,并且使用C++,这个时候,才需要考虑学习MFC了,因为这是微软的标准类库,至少Windows平台下,它最权威,你看见没有,我们从学习开始,走了多少步,才走到MFC?是不是MFC不是学习C++上来就必须学的?

  6、学习MFC

  学习MFC,很多人一上来就开始看其体系架构,看得一头雾水,那个模块关系依赖图,我到现在都看不懂。

  呵呵,其实不是啦,和学语言一样,我们学MFC的目的,也不是希望成为MFC的专家,而是要利用MFC开发Windows应用程序,为我们赚钱。看见没?MFC是手段,不是目的,目的是开发Windows程序。

  其实Windows下,有一套很标准的C接口,叫Win32API,这个才是Windows的标准编程核心,因此,学习MFC,真实的目的是理解Windows程序开发,建议可以先学习Win32API,看来我们又回到C了哈,呵呵。刚开始学C有用吧?

  7、Win32API

  其实Win32APi不难学的,因为虽然它很大,有很多接口,但不是必须的,我们真正做个简单的Windows应用,其实用不到这么多的。做个简单的Dialog,然后实现个功能,你遇到的接口函数,其实绝大多数,就是以后常用的了。把常用的记熟练,就ok了。

  关键是,这个时候要通过WinMain方式,去理解Windows的事件机制,这是核心,其实说起来简单得要死。就是以前你的程序,由于没有系统支撑,很多事必须自己做,比如检查鼠标和键盘输入,你需要写个死循环,自己不断去看,而Windows说,这些事你不要做了,我来做比你好。你没事就玩去吧,我把和你相关的消息放到一个队列里,就是你的事件队列,你自己没事去找找看,有没有新消息来,有就做事,没事就玩好了。很简单是不?

  当然,Windows是多任务操作系统,有时候,我们的逻辑需要并发一些功能,比如说,我在等鼠标键盘消息的时候,需要再看看打印机准备好了没有,这里就需要理解并行计算了,这和语言无关,和操作系统无关,这是另外一个话题,这里不多说了,你可以自己找找线程开发的相关资料看。

  看见没,为了学习好Windows编程,其实我们不仅仅需要学习语言,还要学习操作系统,并行计算原理,内存原理,可能有时候还需要学习网络通信,等很多知识,所以说,单凭学习语言,是成不了商用程序员的,一个合格的程序员,需要理解的东西,太多了,要广为学习。

  当我们把Win32API,以及基本的窗口化程序设计理解了,就可以回到MFC继续学习了。是不是有点递归返回的意思?呵呵。

  8、回到MFC

  原来学MFC很难的,因为其封装了太多细节,很难理解透彻。不过还好,我们有侯老师的深入浅出MFC,去找本来看看,如何从Win32API的纯C编程,改变为MFC的C++方式,看这个最快,基本上前6章看完,已经会了,这里我就不多说了。

  9、COM

  COM、COM、COM,我最头疼的COM,呵呵。

  COM就是一种远程过程调用,即你请求的代码是在另外一个进程中运行的,通过某种通信协议来回传递参数和结果。仅此而已。DCOM进了一步,服务者可以在另外一台计算机上。在公司开发中,大家可能各做一块,如果要合作,Windows下建议多使用COM.(我个人喜欢socket通信哈)

  简单说,COM提供了一种机制,可以跨进程通信,甚至跨机器通信。不过,为了传递各种类型的参数,COM可谓是无所不用其极,它发明了智能指针,可以指向任何类型的数据,同时,为了实现智能指针,它使用了大量的C++泛型设计,看见没,C++的基本功就起作用了,还用到了ATL.

  学习COM,要注意一个接口的概念。由于开发者是不同的人,调用程序和服务程序,可能不是同一种语言,OK,不能简单提供一个C或C++的。h文件来解答接口,因此,COM提供了标准接口,使用者在程序内部,以查询方式获得可用接口,进而以接口ID调用。很累人的。

  学会了COM,就可以多理解一点ActiveX了,那么再学习一点dll(动态链接库)的知识,我们就已经可以写OCX控件了。一般说来,OCX控件是个很好的设计,哪都能用,一个软件的模块,最理想是开发成这个样子,比exe灵活。

时间: 2024-10-11 02:27:31

C和C++的学习过程总结的相关文章

9天C#转Java学习过程,自己记录一下

其实没有完整的9天,就是连续每天花点时间,过程so frustrated,踩坑无数...下面是学习过程的记录 第1天 开始正式学习JavaEE,已完成: 1. Tomcat安装: 2. Tomcat配置.完成了IIS占用的80端口停用,将Tomcat监听端口改为80端口,然后修改hosts,增加解析www.javademo.dev到127.0.0.1.然后写了一个最简单hello-world html页面,在浏览器输入前面的网址可以访问.Tomcat/conf/server.xml配置如下: <

信息安全系统设计基础——第一周学习过程记录与总结体会

第一周学习过程记录与总结体会 第1节    Linux系统简介 1.Linux操作系统:即内核和系统调用两层 2.Linux与Windows的不同: (1)免费与收费 (2)软件与支持 (3)安全性 (4)使用习惯 (5)可定制性 (6)应用范畴 (7)各自缺乏的 3.如何学习Linux (1)明确态度,形成良好学习心态 (2)重视基础,从头学习 第2节  基本概念及操作 1.桌面环境介绍 通过内核—服务器(X.org) —客户端(X.client)实现完整的桌面环境,与Windows不同. 2

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 我的linux学习过程 -环境变

ls 这个命令其实很简单!但他是如何运行的呢! 我现在的理解应该是 把 ls='ls --color=auto'这句话写在了一个配置文件中! 当我们 运行 ls 的时候 其实运行的是 ls --color=auto这个命令! 所以 ls 这个变量就是环境变量!那我们该如何配置环境变量呢! 两种方式 1:配置临时环境变量!方法  alias ls='ls --color=atuo' 2:配置永久环境变量!方法  讲 alias ls='ls --color=auto'这句话写到配置文件中去 配置文

OC开发学习过程中的一些小经验

1.引入头文件以及框架 :  @import   XXXX         XXXX表示需要引入的文件/框架2.头文件引用循环:两个头文件相互包含时,将其中一个头文件的类用@class引入3.设置边角幅度 :[  XX.layer setCornerRadius:100 ]  ;    XX表示需要设置边角的对象,一般是给按钮设置,边角幅度大小跟最后数字取值关联.4.多个引号处理方法:引号前加\,如果还有括号影响,就再单独用@“ “将其框起来..专业术语叫转义字符.. 5.在UIWebview中

opnet学习过程

学习opnet有一段时间了,走了 不少弯路,现在,想总结一下,推荐给大家一个比较好的学习过程. 因为英语不太好,所以在开始学opnet时用了很多心思去找中文资料,比如说,一些文档.书.视频等.看文档和书的问题是:因为软件的版本一直在更新,你所安装的版本与找到的资料所介绍的版本不一定一样,所以有时会找不到需要操作的菜单.看视频的问题是:太枯燥,根本看不下去. 在偶然的一个时刻,打开了opnet的help-Tutorials,然后发现,中文文档包括书,都是对它的翻译. 在此之后,学习进度便快了很多.

asp.netmvc4从0开始学习笔记(记录自己的学习过程---开始)

2013年10月27进入开发行业,到现在快2年时间了,呆过2家公司,第二家公司从去年8月到现在,也快有一年了,到如今,也没有什么学习的地方,于是准备跳槽,出去面试的时候,所有公司都有一个要求:mvc,从来没有做过mvc,只知道有这么个东西,面试了也有6.7家,面试上三家,期中2家因为不会mvc开出的工资比现在低,最后一家比现在高那么一点,但也不是那么好.由于不想再进坑,所以打算学习一下mvc,然后再作跳槽.开始时间2015年7月11号,买了本书:精通asp.net mvc4,一共差不多600页,

Qt学习过程中遇到的问题

由于工作需要,开始使用Qt,由于在网上找的教程文档时针对qt3的,所以在学习的过程遇到了许多由于版本不一致造成的问题,因此记录下来. 参考的文档是:Qt入门教程 详细讲解版 本机Qt版本为:Qt5.3.1(windows.Linux(CentOS 6.2)) windows下 1.错误:C1083: 无法打开包括文件:“QApplication”: No such file or directory原因:Qt5里不再用QtGui模块,而是使用QtWidgets模块.解决办法:在工程文件.pro里

android 学习过程中登陆失效的个人理解

今天在学习的过程中,要做登陆失效的功能,所以就找了些资料,好好看了一下,研究了一番,慢慢的做出来了! 比如:你在一个手机端登陆了账号,在另外的一个手机端也登陆了账号,此时,前一个手机端的账号会提示登陆失效. 意思是只能存在一个账号,这个其实不是很难. 每次登陆的时候会存在一个Token,每次登陆的Token是不一样的! 下面贴一下前端的一些小代码: 在异步网络请求里面判断返回的异常是否是登陆失效: @Override protected void onPostExecute(BusinessRe

php学习过程

作者:沈杰链接:https://www.zhihu.com/question/27170424/answer/82034587来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 因为这是面试中会问到的一个问题,虽然它看起来很简单. 回答做网站的,也就是个简单建站的水平. 回答做网站后端开发的,对PHP有了一定的认识. 回答做后端处理的,有了更深层次的认识. 学习一样技能,你得先清楚这项技能是到底做什么的,说到这里,我想大家都会简单的说是做网站的,因为PHP在WEB领域

linux学习之九 学习过程总结

~写在前面 首先非常感谢孟老师的悉心讲解,使用这种新颖的教学方式(MOOC课堂+博客),也感到非常有幸随着老师的思路对linux的内核进行了初步的系统学习.结合代码和gdb调试工具跟踪分析对linux内核的一些重要机制有了更深刻的理解. 一 学习Linux内核的心得Linux系统的理解 liunx内核是一个十分庞大的操作系统,代码量动辄上千万行,并且还会越来越大,所以通过阅读代码来了解他的机制是不现实的.但是光拿着一本讲linux工作机制的书,比如那本引为经典的巨厚的<深入理解linux内核>