C++ 初学者指南 第一篇(4)

必备技能1.4:第一个简单的程序
    现在我们开始编程了。我们通过编译和运行下面的一个简短的C++程序开始:

/* 
    这是一个简单的C++程序. 
    文件名称为 Sample.cpp. 
*/ 
#include <iostream> 
using namespace std; 
// C++程序都是从main()函数开始的 
int main() 
{ 
    cout << "C++ is power programming."; 
    return 0; 
} 

我们将按照下面的三个步骤来进行
1.键入程序
2.编译程序
3.运行程序
    在开始之前,让我们先复习两个术语:源代码和目标代码。源代码就是人类可读的程序,它是存储在文本文件中的。目标代码是由编译器生成的程序的可执行形式。

 

键入程序
    本书中出现的程序都可以从Osborne的网站上获取到:www.osborne.com 。然而,如果你想手工键入这些程序也是可以的。手工键入这些程序通常可以帮助我们记忆这些关键的概念。如果你选择手工键入这些程序,你必须有一个文本编辑器,而不是一个字处理器。字处理器通常存储带有格式的文本信息。这些信息会使得C++编译器不能正常工作。如果你使用的是windows平台,那么你可以使用记事本程序,或者其它你喜欢的程序编辑器。
存储源代码的文件名称从技术上来说是可以任意取的。然而,C++程序文件通常采用.cpp的扩展名。因此,你可以任意命名C++的程序文件,但是它的扩展名应该是.cpp。针对这里的第一个例子,源文件取名为Sample.cpp。本书中的其它程序,你可以自行选择文件名。

 

编译程序
    怎样编译Sample.cpp取决于你的编译器和你采用了什么样子的编译选项。更进一步来说,许多编译器,例如你可以自由下载的微软的 Visual C++ Express Edition,都提供两种不同的编译方式:命令行编译和集成开发环境。因此,这里不可能给出一个通用的编译C++程序的操作。你必须查看与你的编译器相关的操作指南。
如果你采用的是Visual C++,那么最简单的编译和运行本书中的程序的方式就是采用VC中提供的命令行。例如,使用Visual C++来编译Sampler.cpp,你可以采用这样的命令行:
C:/...>cl -GX Sample.cpp
其中-GX是增强编译选项。在使用Visual C++命令行编译器之前,你必须先执行visual C++提供的批处理文件 VCVARS32.BAT。Visual Studio 同时也提供了一个很方便使用命令行的方式:可以通过任务栏的 开始|程序|Microsoft Visual Studio 菜单中的工具列表中的Visual Studio Command Prompt菜单来激活命令行。
C++编译器的输出是一个可以执行的目标代码。在windows环境下,可执行文件的名字和源码文件的名字相同,但是扩展名为.exe。因此,Sample.cpp的可执行文件为Sample.exe。

 

运行该程序
    C++程序编译好之后就可以运行了。既然C++编译器的输出为可执行的目标代码,那么运行这个程序,只需要在命令行提示符下键入这个程序的名字即可。例如,运行Sample.exe时,采用如下的命令行
C:/...>Sample  
运行时,程序将显示下面的输出:
C++ is power programming.
    如果你使用的是集成开发环境,那么你可以从菜单中选择Run 来运行这个程序。运行的方式也和编译器相关,这点请参考你使用的编译器的操作指南。针对本书中的程序,通常从命令行来编译和运行会简单一些。
最后一点:本书中的程序都是基于控制台模式的,而不是基于windows模式的。也就是说,这些程序是运行在命令行提示符下的。C++对windows编程也是很内行的。实际上,它是windows开发时最常用的语言。然而,本书中所有程序都没有使用windows的图形化用户界面。这一点的原因也很好理解:windows编程本质上是很巨大和复杂的,即使是创建一个最小的windows框架程序也需要50至70行代码,而编写能够展示C++特性的windows程序也需要几百行代码。相比之下,基于控制台的程序更短小,通常都是采用基于控制台的程序来学习的。一旦你掌握了C++,你就能够很轻松地把学习的知识应用到windows编程上了。

逐行剖析第一个简单的程序
    尽管Sample.cpp相当短小,但是它却涵盖了几个C++中常用的关键特性。让我们近距离地研究一下这个程序的每个部分。程序以
/*
    这是一个简单的C++程序.
    文件名称为 Sample.cpp. 
*/
开始,这点是很常见的。就像其它大多数编程语言一样,C++允许程序员对程序的源码进行注释。注释的内容会被编译器忽略掉。注释的目的是给所有读源码的人描述或者解释该程序。就本例子来讲,注释解释了改程序的功能。在更复杂的程序中,注释可以被用来解释程序的每个部分是为什么这样做,以及如何做才能以完成预期的功能。换句说,你可以对程序的功能提供一种详细的描述。
在C++中,有两种注释的方式。刚才看到的叫做多行注释。这种类型的注释以/*开始, 以*/结束。任何处于这两个注释符号之间的内容都会被编译器忽略掉。多行注释可以是一行或者多行的。第二种注释会在后续的程序中看到。
    接下来的代码是:
#include <iostream>
C++语言定义了几个头文件,这些头文件中定义了或者必要的或者有用的信息。该程序就需要头文件中的iostream 来支持C++的输入/输出系统。该头文件是由编译器提供的。程序中通过#include来包含头文件。在本书后续章节中,我们会学习到更多的关于头文件和为什么要包含头文件的知识。
    接下来的代码是:
using namespace std;
这行告诉编译器使用std命名空间。命名空间是相对较新的增加到C++里面的特性。本书后续会对命名空间进行详细的讨论,这里给出一个简单的描述。一个命名空间创建了一个声明域,其中可以放置各种程序元素。在一个命名空间中声明的元素和另外一个命名空间中声明的元素是相互分开的。命名空间可以帮助我们组织大型程序。using语句通知编译器我们要使用std这个命名空间。这是声明了整个标准C++库的命名空间。通过使用std这个命名空间,我们访问标准库。(因为命名空间相对比较新,旧的编译器可能不支持。如果你使用的是旧的编译器,请参见附录B,其中描述了简单的应急措施)
程序的下一行是:
// C++程序都是从main()函数开始的
这一行中使用到了C++中的第二种注释方式:单行注释。单行注释以//开始,在一行的末尾结束。通常情况下,针对较多的,详细的注释使用多行注释,简单的注释一般使用单行注释。当然,这个也完全是个人编程风格的问题。
    接下来的一行代码,正如上面的注释一样,是程序执行的入口:
int main()
所有的C++程序都是由一个或者多个函数组成。正如前面解释的那样,一个函数就是一个子程序。每一个C++函数都必须有个名字,任何C++程序都必须有一个main()函数,就像本例子中的一样。main()函数是程序执行的入口,通常也是程序结束的地方。(从技术上来讲,一个C++程序通过调用main()函数而开始,大多数情况下,当main()函数返回的时候,程序也就结束了)。该行中的一对括号表示main()函数代码的开始。main()函数前面的int 表明了该函数的返回值为int类型。后面会介绍到,C++支持几种内建的数据类型,其中就有int。它代表的是一个整型数。
接下的一行是:
cout<<"C++ is power programming.";
这是一条控制台输出语句。它输出:C++ is power programming. 到计算机显示器上。输出是通过使用输出运算符<<来完成的。<<运算符把它右侧的表达式输出到左侧的设备上。cout是一个预先定义好的标识符,它代表了控制台的输出,通常就是指计算机的显示器。因此,这句程序就是把信息输出到计算机的显示器上。请注意:这句程序是以分号结束的。实际上,所有的C++语句都是以分号结束的。信息“C++ is power programing.”是一个字符串。在C++中,一个字符串就是由双引号引起来的一个字符的序列。在C++中,字符串是会经常用到的。
    下一行是:
return 0;
该行代码终止了main()函数,并且返回0给调用进程(调用进程通常就是操作系统)。对于大多数的操作系统来说,返回值0就意味着程序正常终止。其它返回值则代表程序因为产生了错误而终止。return是C++的关键字之一,用它来表示函数的返回值。所有的程序在正常终止的情况下(也就是没有出现错误的情况下)都应该返回0。
程序最后的大括号表示程序到此结束。

 

处理语法错误
    根据以前的编程经验,我们知道,编程时很容易出现键入错误的情况的。庆幸的是,如果我们在键入程序的时候输入错误了,编译器在编译的时候会报告语法错误信息的。大多数的C++编译器都试图正确理解我们编写的程序。正是由于这个原因,编译器报告的错误并不一定都反映了问题出现的原因。例如,在前面的程序中,如果我们遗忘了main()后面的大括号,编译器则会报告说cout语句有语法错误。当编译器报告语法错误信息的时候,我们就应该检查最新写的那几行代码,看看是否有错误。

 

专家答疑
问:
    除了错误信息以外,编译器还会提供告警信息。告警和错误有什么区别,我应该关注那类信息?
答:
    除了报告致命的错误信息以外,大多是的编译器都会上报几种告警信息。错误信息代表的是程序中出现了明确的错误,比如忘记键入分号等。告警信息则是指出现了从技术上讲是正确的,但是值得怀疑的地方。由程序员来决定此处是否正确。
告警可以用来报告诸如使用了已经被废弃的特性或者无效的构成等。通常来讲,我们可以选择那些告警是可见的。本书中的程序是符合标准C++的,因此只要输入无误,是不会出现令人烦恼的告警信息的。
    针对本书中的示例程序,你可能想使用编译器缺省的错误报告。然而,你可以查阅自己编译器的相关文档以明确编译器提供哪些选项。很多编译器都可以帮助我们检查出潜在的错误,不至于引起大麻烦。了解编译器的错误报告机制是很值得的。

 

练习:
    1.C++程序是从哪里开始执行的?
    2.cout是做什么用的?
    3.#include<iostream>是用来做什么的?
答案:
    1.C++程序从main函数开始执行。
    2.cout是预先定义好的标识符,它连接到控制台输出。
    3.它用来包含头文件<iostream>,可以支持输入/输出。

第 1 章:C++ 基础知识 此模块将向您介绍 C++,包括其历史、设计理念以及几个最重要的功能。此模块简要概述几个 C++ 功能,包括 C++ 程序的一般形式、一些基本控制语句和运算符。它不会介绍太多细节,而会重点介绍对所有 C++ 程序都通用的一般概念。 第 2 章:数据类型和运算符简介 编程语言的核心在于其数据类型和运算符。不出您所料,C++ 支持大量数据类型和运算符,使其适合的编程范围非常广泛。此模块对 C++ 基本数据类型及其最常用运算符进行探讨。我们还将进一步了解变量,并研究表达式。 第 3 章:程序控制语句 此模块讨论用于控制程序执行流的语句。有三种类别的程序控制语句:选择语句,包括 if 和 switch 语句;迭代语句,包括 for、while 和 do-while 循环;以及跳转语句,包括 break、continue、return 和 goto 语句。 第 4 章:数组、字符串和指针 此模块讨论数组、字符串和指针。数组是变量的集合,这些变量具有相同的类型,由一个公用名引用。数组为创建相关变量的列表提供了一种便利方法。C++ 语言不定义内置字符串数据类型。相反,字符串作为字符数组实现。指针是包含内存地址的对象。通常,指针用于访问另一个对象的值。 第 5 章:函数简介 此模块开始深度探讨函数函数C++ 的构建基块,深入理解函数是成为成功 C++ 编程人员的基础。下面,您将了解如何创建函数。您还将了解传递参数、返回值、局部变量和全局变量、函数原型和递归。 第 6 章:进一步了解函数 此模块继续探讨函数。它讨论了 C++ 的三个最重要的函数相关主题:引用、函数重载和默认参数。 第 7 章:更多数据类型和运算符 此模块返回到数据类型和运算符的主题。除了您到目前为止已在使用的数据类型,C++ 还支持其他几种数据类型。其一些数据类型由已知类型加上修饰符组成。其他数据类型包括 enumeration 和 typedef。C++ 还提供多个附加运算符,极大地扩展了 C++ 可以应用到的编程任务范围。 第 8 章:类和对象 类是 C++ 的基本封装单位。类用于创建对象。若要编写面向对象的程序,需要使用类。类和对象对于 C++ 非常重要,因此本书其余内容大部分都或多或少与它们相关。 第 9 章:进一步了解类 此模块继续探讨模块 8 谈到的类。它涉及很多与类相关的主题,包括重载构造函数、传递对象到函数以及返回对象。它还介绍一种特殊类型的构造函数(称为复制构造函数),这种函数在需要对象副本时使用。接下来介绍友元函数,然后是结构和联合,以及 this 关键字。此模块最后介绍运算符重载,这是 C++ 最吸引人的功能之一。 第 10 章:继承、虚函数和多态性 此模块讨论 C++ 与面向对象编程直接相关的三个功能:继承、虚函数和多态性。继承是允许一个类继承另一个类特性的功能。虚函数是在继承的基础上构建的。虚函数支持多态性(面向对象编程的“一个接口,多种方法”原理)。 第 11 章:C++ I/O 系统 C++ I/O 系统非常大,无法在此讨论每个类、函数或功能,不过此模块将介绍最重要和最常用的部分。具体而言,它说明如何输入或输出所设计类的对象。它还介绍如何设置输出格式以及如何使用 I/O 操纵器。此模块最后讨论文件 I/O。 第 12 章:异常、模板和其他高级主题 最后一个模块将介绍几个重要的、高级 C++ 主题,包括异常处理、模板、动态分配和命名空间。另外还介绍运行时类型 ID 和转换运算符。完成此模块后,您将掌握这种语言的核心元素,能够开始编写实际程序。 掌握检查的答案 附录 A:预处理器 预处理器是编译器的一部分,在将源代码实际转换为对象代码之前,预处理器对程序执行各种文本操作。可以为预处理器提供文本操作命令。这些命令称为预处理器指令,它们实际上不是 C++ 的组成部分,但扩展了 C++ 编程环境的范围。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值