博文

C++从零开始(三)——何谓变量(2006-08-30 16:47:00)

摘要:本篇说明内容是C++中的关键,基本大部分人对于这些内容都是昏的,但这些内容又是编程的基础中的基础,必须详细说明。
数字表示 数学中,数只有数值大小的不同,绝不会有数值占用空间的区别,即数学中的数是逻辑上的一个概念,但电脑不是。考虑算盘,每个算盘上有很多列算子,每列都分成上下两排算子。上排算子有2个,每个代表5,下排算子有4个,每个代表1(这并不重要)。因此算盘上的每列共有6个算子,每列共可以表示0到14这15个数字(因为上排算子的可能状态有0到2个算子有效,而下排算子则可能有0到4个算子有效,故为3×5=15种组合方式)。
上面的重点就是算盘的每列并没有表示0到14这15个数字,而是每列有15种状态,因此被人利用来表示数字而已(这很重要)。由于算盘的每列有15个状态,因此用两列算子就可以有15×15=225个状态,因此可以表示0到224。阿拉伯数字的每一位有0到9这10个图形符号,用两个阿拉伯数字图形符号时就能有10×10=100个状态,因此可以表示0到99这100个数。
这里的算盘其实就是一个基于15进制的记数器(可以通过维持一列算子的状态来记录一位数字),它的一列算子就相当于一位阿拉伯数字,每列有15种状态,故能表示从0到14这15个数字,超出14后就必须通过进位来要求另一列算子的加入以表示数字。电脑与此一样,其并不是数字计算机,而是电子计算机,电脑中通过一根线的电位高低来表示数字。一根线中的电位规定只有两种状态——高电位和低电位,因此电脑的数字表示形式是二进制的。
和上面的算盘一样,一根电线只有两个状态,当要表示超出1的数字时,就必须进位来要求另一根线的加入以表示数字。所谓的32位电脑就是提供了32根线(被称作数据总线)来表示数据,因此就有2的32次方那么多种状态。而16根线就能表示2的16次方那么多种状态。
所以,电脑并不是基于二进制数,而是基于状态的变化,只不过这个状态可以使用二进制数表示出来而已。即电脑并不认识二进制数,这是下面“类型”一节的基础。
内存 内存就是电脑中能记录数字的硬件,但其存储速度很快(与硬盘等低速存储设备比较),又不能较长时间保存数据,所以经常被用做草稿纸,记录一些临时信息。
前面已经说过,32位计算机的数字是通过32根线上的电位状态的组合来表示的,因此内存能记录数字,也就是能维持32根线上各......

阅读全文(1028) | 评论:0

C++从零开始(二)——何谓表达式(2006-08-30 16:46:00)

摘要:本篇是此系列的开头,在学英语时,第一时间学的是字母,其是英语的基础。同样,在C++中,所有的代码都是通过标识符(Identifier)、表达式(Expression)和语句(Statement)及一些必要的符号(如大括号等)组成,在此先说明何谓标识符。
标识符 标识符是一个字母序列,由大小写英文字母、下划线及数字组成,用于标识。标识就是标出并识别,也就是名字。其可以作为后面将提到的变量或者函数或者类等的名字,也就是说用来标识某个特定的变量或者函数或者类等C++中的元素。
比如:abc就是一个合法的标识符,即abc可以作为变量、函数等元素的名字,但并不代表abc就是某个变量或函数的名字,而所谓的合法就是任何一个标识符都必须不能以数字开头,只能包括大小写英文字母、下划线及数字,不能有其它符号,如,!^等,并且不能与C++关键字相同。也就是我们在给一个变量或函数起名字的时候,必须将起的名字看作是一个标识符,并进而必须满足上面提出的要求。如12ab_C就不是一个合法的标识符,因此我们不能给某个变量或函数起12ab_C这样的名字;ab_12C就是合法的标识符,因此可以被用作变量或函数的名字。
前面提到关键字,在后续的语句及一些声明修饰符的介绍中将发现,C++提供了一些特殊的标识符作为语句的名字,用以标识某一特定语句,如if、while等;或者提供一些修饰符用以修饰变量、函数等元素以实现语义或给编译器及连接器提供一些特定信息以进行优化、查错等操作,如extern、static等。因此在命名变量或函数或其他元素时,不能使用if、extern等这种C++关键字作为名字,否则将导致编译器无法确认是一个变量(或函数或其它C++元素)还是一条语句,进而无法编译。
如果要让某个标识符是特定变量或函数或类的名字,就需要使用声明,在后续的文章中再具体说明。
数字

C++作为电脑编程语言,电脑是处理数字的,因此C++中的基础东西就是数字。C++中提供两种数字:整型数和浮点数,也就是整数和小数。但由于电脑实际并不是想象中的数字化的(详情参见《C++从零开始(三)》中的类型一节),所以整型数又分成了有符号和无符号整型数,而浮点数则由精度的区别而分成单精度和双精度浮点数,同样的整型数也根据长度分成长整型和短整型。
要在C++代码中表示一个数字,直接书写......

阅读全文(1036) | 评论:0

C++从零开始(一)——何谓编程 (2006-08-30 16:45:00)

摘要:引言

曾经有些人问我问题,问得都是一些很基础的问题,但这些人却已经能使用VC编一个对话框界面来进行必要的操作或者是文档/视界面来实时接收端口数据并动态显示曲线(还使用了多线程技术),却连那些基础的问题都不清楚,并且最严重的后果就是导致编写出拙劣的代码(虽然是多线程,但真不敢恭维),不清楚类的含义,混杂使用各种可用的技术来达到目的(连用异常代替选择语句都弄出来了),代码逻辑混乱,感觉就和金山快译的翻译效果一样。
我认为任何事情,基础都是最重要的,并且在做完我自定的最后一个项目后我就不再做编程的工作,守着这些经验也没什么意义,在此就用本系列说说我对编程的理解,帮助对电脑编程感兴趣的人快速入门(不过也许并不会想象地那么快)。由于我从没正经看完过一本C++的书(都是零碎偶尔翻翻的),并且本系列并不是教条式地将那些该死的名词及其解释罗列一遍,而是希望读者能够理解编程,而不是学会一门语言(即不止会英翻汉,还会汉翻英)。整个系列全用我自己的理解来写的,并无参考其他教材(在一些基础概念上还是参考了MSDN),所以本系列中的内容可能有和经典教材不一致的地方,但它们的本质应该还是一样的,只是角度不同而已。本系列不会仔细讲解C++的每个关键字(有些并不重要),毕竟目的不是C++语言参考,而是编程入门。如果本系列文章中有未提及的内容,还请参考MSDN中的C++语言参考(看完本系列文章后应该有能力做这件事了),而本系列给出的内容均是以VC编译器为基础,基于32位Windows操作系统的。
下面罗列一下各文章的标题和主要内容,红色修饰的文章标题表示我认为的重点。
C++从零开始(一)——何谓编程(说明编程的真正含义及两个重要却容易被忽略的基础概念)
C++从零开始(二)——何谓表达式(说明各操作符的用处,但不是全部,剩余的会在其它文章提到)
C++从零开始(三)——何谓变量(说明电脑的工作方式,阐述内存、地址等极其重要的概念)
C++从零开始(四)——赋值操作符(《C++从零开始(二)》的延续,并为指针的解释打一点基础)
C++从零开始(五)——何谓指针(阐述指针、数组等重要的概念)
C++从零开始(六)——何谓语句(讲解C++提供的各个语句,说明各自存在的理由)
C++从零开始(七)——何谓函数(说明函数及其存在的理由)<......

阅读全文(1098) | 评论:0

程序宝典:C++学习感想(2006-08-30 15:40:00)

摘要: 程序宝典:C++学习感想     在一些论坛上经常会看到一些各语言的优劣比较,知道自己所学语言的优劣也好,但是如果一味停留在这个层面就没有用了。任何语言都只是工具而已。重要的是使用工具的人!就我个人的经验来讲,真正处于业界搞开发的人都愿意使用成熟的、为自己所熟知的技术来完成工作。 而新手都喜欢用一些比较新的技术来做开发,而且喜欢追求新奇(从界面很容易看出来,花花绿绿的界面多半出自新手)。其实,安于用一些效率可能低下、扩展性和维护性差的方法来解决问题并不是开发人员的错。他们只是在完成工作而已。但是作为一个真正有上进心的开发人员,我们应该使用更优雅和高效的编程技术,这才是我们逐渐变成编程“大牛”的好习惯。老是停留在原地,很容易被淘汰的。在软件开发这个行当,尤其如此。无论是对学生,还是一线开发人员,我觉得都不应该产生“书读够了”的感叹!我有时候喜欢将以前看过的书翻出来再看,每次总能体会到一些新东西。有关C++语言的书籍更是如此,而且我觉得我所起的题目不是很好。为什么?因为我觉得学习语言还只是新手跨入软件开发“地狱”的第一步,单单学习语言本身是远远不够的,还要学习相关的程序库(C++当然首选是先学习C++标准程序库)、相关的平台技术(如.NET),说得更远一点,还要锻炼对目标问题的分析、归纳能力等等。工作之前,技术路线自己作主,工作之后,绝大多数程序员将被公司技术路线左右。所以,趁现在还有时间,可以学一些自己感兴趣的。如果想搞软件开发,特别是电力系统软件的开发,学好C++不会令我们失望。当我们进入C++的前门,然后经过一段黑暗之路,再从后门出来到达光明顶后,我们会体味到“一览众山小”的感觉。 

  推荐书籍:  

  《编程高手箴言》---------- 梁肇新(用过超级解霸的都应该知道吧,^_^)写的第一本书,其中有几章还是值得一读的。在这本书中,梁告诉我们,学东西要耐心,要耐得住“寂寞”,走自己的路,让别人去“说”吧!

  最近比较忙,原来打算紧扣主题讲讲一些具体的C++语言的细节的,但还是抽不出大段的时间了。所以,现在只能再漫谈一些关于C++的故事了。 
     &n......

阅读全文(1152) | 评论:0

Visual C++ 入门精解(2006-08-30 15:33:00)

摘要: Visual C++ 入门精解   VC作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格的来说VC++不是门语言,虽然它和C++之间有密切的关系,如果形象点比喻的话,可以C++看作为一种”工业标准”,而VC++则是某种操作系统平台下的”厂商标准”,而”厂商标准”是在遵循”工业标准”的前提下扩展而来的。   VC++应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装,所以MFC相对于WIN API开发更具备效率优势,但为了对WINDOWS开发有一个较为全面细致的认识,笔者在这里还是以讲解WIN API的相关内容为主线。   话说到这里可能更多人关心的是学习VC++需要具备什么条件,为什么对于这扇门屡攻不破呢?   要想学习好VC必须具备良好的C/C++的基础,必要的英语阅读能力也是必不可少的,因为大量的技术文档多以英文形式发布。   许多初学VC++的人对于它怪异的写法和程序奇特的工作方式非常不理解,为了帮助大家对它的入门有一个比较概括的了解,我们把这一小节内容分成若干部分讲解。   第一部分:VC++中的对象的命名规则、常用宏定义的命名,以及VC++下的数据类型。
  注:这部分简单浏览即可。   第二部分:VC++常用技术术语的解释。   第三部分:HelloWin程序的详细分析。
 
  ......

阅读全文(1254) | 评论:0

我的Visual C++入门之路(2006-08-30 15:30:00)

摘要:
“N次失败,1次成功,还学的不怎么样……你也太笨了吧!”如果您有这样的评价,那么祝贺您,您已经了解了我这人的99.9%。N这个数字具体是多少连我自己也记不清楚,保守地讲(N≥6==TRUE)这个表达式是能够成立的。 回想我的VisualC++入门过程,一路过来,绝对不是像黄飞鸿的功夫那样潇洒精彩,而更像是一颗石头顺流而下,在河床底摸爬滚打、磕磕碰碰。今天是周末,我就把以前N次失败留给我的经验教训胡写上几笔,如果有朋友看到这篇拙文,又刚好打算尝试一下VisualC++,也就算是我给您留下的莽原一径吧。
  一.C++语言的基础

  说起入门慢,第一个原因莫过于语言基础了.高中时期学校组织的微机兴趣小组学习的是PASCAL语言(我也不知道为什么要讲这个语言,如果说是为了应付比赛,当时也有C语言组呀),所以在大学转向Windows编程的时候,我首先选择了Delphi.大三的时候学校要求考国家二级,二级没有Delphi,于是又转向了VB,原因是VB做起来与Delphi很像。后来发现VB的IDE做的比Delphi好用,而且BASIC语言写起来简单,于是便弃Delphi而去(明眼人恐怕又要骂我了,若不是太懒,怎么会喜欢VB的IDE呢?的确是这样,后文会提到,懒不仅仅是学习VC的大敌,而且懒人是什么都学不好的)。长年与VB打交道,让我对C/C++语言很不习惯——我不喜欢C++写一个句语要打一个分号,我不喜欢大小写字母要严格区分,我不喜欢比较的时候要写两个等号,我不喜欢……总之,对C++很没好感,没好感也就没兴趣学了(后面提到兴趣是相当重要的)。当然如果你现在再问我应该学习什么语言,我会毫不犹豫地向你推荐C++,因为就常用语言而言,C++语言中包含的知识是相当全面的——从面向过程,到基于对象/面向对象,再到模板和范型,可以说是应有尽有,不夸张地说,别的语言在某种程度上而言是C++语言的子集或者说是在模仿C++、向C++靠拢。

  在数次失败中,给我很明显的感觉就是,不学好C++语言就学习VisualC++纯粹是一种自虐。这次入门之前,我花了3个多月的时间系统地学习了C++语言,够意思吧。然后我信心实足地敲响VisualC++的家门,呵呵,这次她终于肯给面子了。举个例子吧,在看Dll的调用时,用到“函数指针”,顺理成章就看下去......

阅读全文(1355) | 评论:0

学习C++五十条忠告!(2006-08-30 15:12:00)

摘要:学习C++五十条忠告
    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++》......

阅读全文(1048) | 评论:0