JackIO 发表于 2014-12-24 15:40:58

【小学】[Class0x01] C++简介及第一个C++程序

本帖最后由 ReverseFuture 于 2014-12-24 16:19 编辑

写在前面的话:   
      在接下来的一段时间内,我将同大家共同学习C++这门编程语言。虽然我也使用C++有一段时间,但由于自己的疏忽和理解问题,所以可能会存在一些错误,还请大家多多指正,以促进我们共同学习。
      这一系列课程主要针对C++初学者,我打算分为三个大的阶段:小学、初中和高中。小学阶段我们主要学习C++的一些基础概念和知识,中学阶段我们主要学习一些稍微不那么简单的东西,高中阶段主要学习C++在面向对象方面的知识和使用。至于为何没有大学或者研究生阶段,我觉得那些阶段主要的功夫应该是自己从实践中总结和学习,并在使用中去钻研,即所谓“需要什么学什么”。
      接下来,就开始我们小学阶段的第一课:C++简介及第一个C++程序“Hello World!”。

一、C++简介
      C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象设计、制作图标等多种程序设计风格。最新正式标准C++14于2014年8月18日公布。(摘自百度百科)
      C++保留了C语言原有的优点,并在C语言的基础上增加了面向对象机制,使得C++既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
      C++对C的“增强”,主要表现在两个方面:
         (1)在原来面向过程的机制基础上,对C语言的功能做了很多扩充。
         (2)增加了面向对象的机制。
      学习C++,既要会利用C++进行面向过程的结构化程序设计,也要会利用C++进行面向对象的程序设计。面向过程程序设计在通信、信号处理等领域使用比较多,而面向对象程序设计思想在软件开发等方面使用特别广泛,甚至可以说软件开发几乎离不开面向对象设计思想。
      至于C++的发展历史、C++与C语言的关系,以及C++与其他静态语言(Java、C#等)或动态脚本语言(Python、Ruby、JavaScript、C shell等)的区别,此处我们不做讨论。有兴趣的可以自行去查找相关资料。

二、第一个C++程序
       我想每个程序员都应该知道,在我们当初学习每一门新的编程语言的时候,总是有第一个程序“Hello World!”,为什么会以“Hello World!”作为我们学习一门编程语言时的第一个程序呢?我想也许是为了表现出程序员们乐观积极的心态,才以此作为第一个程序,恰似“编程世界你好,我来啦!”这种意味,在还没有遇到以后的编程难题的时候预先给自己一种平和、乐观的心理暗示,从此慢慢让自己从心理上喜欢上这门语言。
      下面就请出我们今天的主角“Hello World!”:
      注意:
                系统:Windows 8 64位旗舰版
                IDE:Dev-C++5.4.1(比较小巧、轻便)
    首先给出第一个C++程序的源代码如下:

#include<iostream> //头文件
using namespace std; //命名空间std

int main()
{
      cout<<"Hello World!"<<endl;
      return 0;
}
      运行结果如图1所示:                                                 
                                          图1 运行结果
       至此,我们的第一个C++程序演示完毕。大家可以下载一个自己比较喜欢的C++IDE(集成开发环境),当然对于学习来说,Dev C++已经够用了。至于Dev C++使用教程,网上一搜一大批。然后大家可以试着写出上面的源代码,并执行。怎么样,很神奇吧!
       第一个程序虽然比较简单,但麻雀虽小,五脏俱全,在一定程度上这个程序就是规模稍微大的程序的一个缩影。所以,在这里我们很有必要介绍程序中每一句代码到底是什么意思。
       第一行:“#include<iostream> ”,这其实不是C++语句,而是C++的预处理命令,预处理命令以“#”开头,并且所在行的末尾没有分号,而C++语句必须以分号表示该条语句的结束。而“//头文件”表示的是注释,即本行中“//”符号后面的内容并不是我们所要执行的程序的内容,而是方面人们查看代码而做的功能性的解释。“#include<iostream>”是一个“包含命令”,它的作用是将文件iostream的内容包含到该命令所在的程序文件中,代替该命令行。此外,这类“包含命令”都会放在源程序文件的开头部分,故我们称其为“头文件”(head file),一般我们自己写的头文件都以“.h”作为扩展名。在程序进行编译时,先对所有的预处理命令进行处理,将头文件的具体内容代替#include命令行,然后再对该程序单元进行整体编译。
       第二行:“using namespace std;”表示“使用命名空间std”,其实通过英文意思也可以猜出来。因为C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,因此程序中如果需要用到C++标准库函数(我们的程序中用到了“cout”这个函数),就需要用“using namespace std; ”作声明,表示要用到命名空间std中的内容。“//命名空间std”同样表示注释。
       在初学C++时,对本程序中的第1、2行可以不必深究,只需知道:如果程序有输入或输出时,必须使用“#include<iostream>”命令以提供必要的信息,同时要用“using namespace std;”使程序能够使用这些信息,否则程序编译时将出错。(不信的同学,可以注释掉二者中的任一行,看看有什么错误。什么?不知道怎么注释?赶紧回头看第一行代码的解释部分。)
       第四行:“int main()”,main代表“主函数”的名字,每个C++程序都必须有一个main函数用以作为程序执行的入口点,正如我们每个人都要有一张嘴一样,不然怎么吃饭?其实main函数的完整形式应该是int main(){ xxx; },其中int 代表main函数执行结束之后的返回值类型;“()”代表main函数需要我们传入的参数类型以及个数,该程序中()里面是空的,意思就是我们不需要传入任何参数;“{ xxx; }”中的左右花括号代表main函数的函数体,“xxx;”代表我们需要在函数体里面写的代码。在本程序中我们在函数体中写的代码是什么你看出来了吗?聪明,就是“cout<<"Hello World!"<<endl;return 0;”这两句。
       第五行:“{”,同第八行中的“}”共同组成了main函数的函数体限定分界符。
       第六行:“cout<<"Hello World!"<<endl;”这一行是我们“Hello World!”中最重要的一行代码,它的意思是向控制台(Console)打印出“Hello World!”这句话,然后空一行。什么?什么是控制台?控制台就是图1中我们所看到的那个黑色背景的窗口。
       第七行:“return 0;”,在讲解第四行的时候我们说了“int main()”中“int”的作用,代表该main函数返回值的类型为int,也就是说该main函数结束的时候必须要向操作系统返回一个int类型的数,这就正好对应第七行中的这句代码,返回的数字为0。其实,如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为-1;如果程序正确执行了的话,就会返回我们让它返回的数值。   
       好啦,至此我们的第一个C++程序讲解已经结束。

三、结束语
       至此,我们学习了C++版的第一个程序“Hello World!”。大家可以尽情尝试,可以按自己的想法尽情聆听敲击键盘的声音,然后欣赏自己小小的的成果。

扩展:
       1、如果想打印出“XXX,merry christmas!”,该怎么办呢?
       2、如果想打印出汉字版的“圣诞快乐”呢?


dawnchen 发表于 2014-12-25 09:30:03

之前一直敲代码,没有深究“using namespace std;”这次总算明白了:D

myoldid 发表于 2014-12-25 11:13:57

准备简单的了解下c++,这样再搞逆向的时候有帮助

kanon 发表于 2014-12-25 12:13:22

很不错 值得学习 本来评论写了好长的 但又删了 不然 过两天我帖子就没得写了

JackIO 发表于 2014-12-25 12:51:46

dawnchen 发表于 2014-12-25 09:30
之前一直敲代码,没有深究“using namespace std;”这次总算明白了

看来我这篇帖子没白写啊,以后有什么错误的地方还请大神多多指正啊。:lol

JackIO 发表于 2014-12-25 12:53:14

myoldid 发表于 2014-12-25 11:13
准备简单的了解下c++,这样再搞逆向的时候有帮助

确实这样,我也是感觉到了这一点,所以想来个基础教程,顺便自己复习一下。:D

JackIO 发表于 2014-12-25 12:54:20

kanon 发表于 2014-12-25 12:13
很不错 值得学习 本来评论写了好长的 但又删了 不然 过两天我帖子就没得写了...

看来你有很多学习心得,很期待你赶快写出来与大家分享啊。:lol

vxzv 发表于 2014-12-29 08:13:38

一直想学C++,对自己狠不下心来呀

JackIO 发表于 2014-12-29 11:34:04

vxzv 发表于 2014-12-29 08:13
一直想学C++,对自己狠不下心来呀

坚持半个月,基本上就能掌握常用知识点,后期多编码。

爱沵不后悔 发表于 2015-7-30 09:49:06

页: [1] 2
查看完整版本: 【小学】[Class0x01] C++简介及第一个C++程序