开始学习C++

开始学习C++

本章内容包括

  • 创建C程序
  • C++程序的一些格式
  • include编译指令

  • main() 函数
  • 使用cout对象进行输出
  • 在C++对象中加入注释
  • 何时以及如何使用endl
  • 声明和使用变量
  • 使用cin对象进行输入
  • 定义和使用简单的函数

要建造简单的房屋,首先要打地基、搭框架。如果一开始没有牢固的结构,后面就很难建造窗子、门框、圆屋顶和镶木地板的舞厅等。同样,学习计算机语言时,应从程序的基本结构开始学起。只有这样,才能一步一步了解其具体细节,如循环和对象等。本章对C++程序的基本结构做一概述,并预览后面将介绍的主题,如函数和类。(这里的理念是,先介绍一些基本概念,这样可以激发读者接下去学习的兴趣。)

进入C++

首先介绍一个显示消息的简单C++程序。程序清单2.1使用C++工具cout生成字符输出。源代码中包含一些供读者阅读的注释,这些注释都以//打头,编译器将忽略它们。C++对大小写敏感,也就是说区分大写字符和小写字符。这意味着大小写必须与示例中相同。例如,该程序使用的是cout,如果将其替换为Cout或COUT,程序将无法通过编译,并且编译器将指出使用了未知的标识符(编译器也是对拼写敏感的,因此请不要使用kout或coot)。文件扩展名cpp是一种表示C++程序的常用方式,您可能需要使用第1章介绍的其他扩展名。

#include<iostream>
int main() {
	using namespace std;
	cout<< "Come up and C++ me some time" << endl;
	cout << endl;
	cout<< "You wont regret it!" << endl;
	return 0;
}

在return语句前加入:cin.get();

对于有些程序,要让窗口一直打开,直到您按任何键,必须添加这样的两条语句。

如果您使用的系统很旧,它可能不支持C++ 98新增的特性。

有些程序要求编译器对C++11标准提供一定的支持。对于这样的程序,将明确指出一点。并在可能的情况下提供非C++11代码。

将该程序复制到您的编辑器中。便可以使用C++编译器创建可执行的代码了。下面是运行编译程序后得到的输出:

Come up and C++ me some time

You wont regret it!

如果已经使用过C语言进行编程,则看到cout函数(而不是printf( )函数)时可能会小吃一惊。事实上,C++能够使用printf( )、scanf( )和其他所有标准C输入和输出函数,只需要包含常规C语言的stdio.h文件。不过本书介绍的是C++,所以将使用C++的输入工具,它们在C版本的基础上做了很多改进。

您使用函数来创建C++程序。通常,先将程序组织为主要任务,然后设计独立的函数来处理这些任务。程序清单2.1中的示例非常简单,只包含一个名为main( )的函数。myfirst.cpp示例包含下述元素。

  • 注释,由前缀//标识
  • 预处理编译指令#include
  • 函数头:int main()
  • 编译指令 using namespace
  • 函数体,用{和}括起
  • 使用C++和cout工具显示消息的语句。
  • 结束main函数的return语句

下面详细介绍这些元素。先来看看main( )函数,因为了解了main( )的作用后,main( )前面的一些特性(如预处理器编译指令)将更易于理解。

main()

int main(){
    statements
    return 0;
}

这几行表明有一个名为main( )的函数,并描述了该函数的行为。这几行代码构成了函数定义(function definition)。该定义由两部分组成:第一行int main( )叫函数头(function heading),花括号({和})中包括的部分叫函数体。图2.1对main( )函数做了说明。函数头对函数与程序其他部分之间的接口进行了总结;函数体是指出函数应做什么的计算机指令。在C++中,每条完整的指令都称为语句。所有的语句都以分号结束,因此在输入示例代码时,请不要省略分号。

main( )中最后一条语句叫作返回语句(return statement),它结束该函数。本章将讲述有关返回语句的更多知识。

语句和分号

语句是要执行的操作。为理解源代码,编译器需要知道一条语句何时结束,另一条语句何时开始。有些语言使用语句分隔符。例如,FORTRAN通过行尾将语句分隔开来,Pascal使用分号分隔语句。在Pascal中,有些情况下可以省略分号,例如END前的语句后面,这种情况下,实际上并没有将两条语句分开。不过C++与C一样,也使用终止符(terminator),而不是分隔符。终止符是一个分号,它是语句的结束标记,是语句的组成部分,而不是语句之间的标记。结论是:在C++中,不能省略分号。

作为函数的函数头

就目前而言,需要记住的主要一点是,C++句法要求main( )函数的定义以函数头int main( )开始。本章后面的“函数”一节将详细讨论函数头句法,然而,为满足读者的好奇心,下面先预览一下。

通常,C++函数可被其他函数激活或调用,函数头描述了函数与调用它的函数之间的接口。位于函数名前面的部分叫作函数返回类型,它描述的是从函数返回给调用它的函数的信息。函数名后括号中的部分叫作形参列表(argument list)或参数列表(parameter list);它描述的是从调用函数传递给被调用的函数的信息。这种通用格式用于main( )时让人感到有些迷惑,因为通常并不从程序的其他部分调用main( )。

然而,通常,main( )被启动代码调用,而启动代码是由编译器添加到程序中的,是程序和操作系统(UNIX、Windows 7或其他操作系统)之间的桥梁。事实上,该函数头描述的是main( )和操作系统之间的接口。

来看一下main( )的接口描述,该接口从int开始。C++函数可以给调用函数返回一个值,这个值叫作返回值(return value)。在这里,从关键字int可知,main( )返回一个整数值。接下来,是空括号。通常,C++函数在调用另一个函数时,可以将信息传递给该函数。括号中的函数头部分描述的就是这种信息。在这里,空括号意味着main( )函数不接受任何信息,或者main( )不接受任何参数。(main( )不接受任何参数并不意味着main( )是不讲道理的、发号施令的函数。相反,术语参数(argument)只是计算机人员用来表示从一个函数传递给另一个函数的信息)。

简而言之,下面的函数头表明main( )函数可以给调用它的函数返回一个整数值,且不从调用它的函数那里获得任何信息:

很多现有的程序都使用经典C函数头:

main() // original c style

在C语言中,省略返回类型相当于说函数的类型为int。然而,C++逐步淘汰了这种用法。

也可以使用下面的变体:

int main(void) // very explicit style

在括号中使用关键字void明确地指出,函数不接受任何参数。在C++(不是C)中,让括号空着与在括号中使用void等效(在C中,让括号空着意味着对是否接受参数保持沉默)。

有些程序员使用下面的函数头,并省略返回语句:

void main()

这在逻辑上是一致的,因为void返回类型意味着函数不返回任何值。该变体适用于很多系统,但由于它不是当前标准强制的一个选项,因此在有些系统上不能工作。因此,读者应避免使用这种格式,而应使用C++标准格式,这不需要做太多的工作就能完成。

最后,ANSI/ISO C++标准对那些抱怨必须在main( )函数最后包含一条返回语句过于繁琐的人做出了让步。如果编译器到达main( )函数末尾时没有遇到返回语句,则认为main( )函数以如下语句结尾:

return 0;

这条隐含的返回语句只适用于main( )函数,而不适用于其他函数。

为什么main( )不能使用其他名称

之所以将myfirst.cpp程序中的函数命名为main( ),原因是必须这样做。通常,C++程序必须包含一个名为main( )的函数(不是Main( )、MAIN( )或mane( )。记住,大小写和拼写都要正确)。由于myfirst.cpp程序只有一个函数,因此该函数必须担负起main( )的责任。在运行C++程序时,通常从main( )函数开始执行。因此,如果没有main( ),程序将不完整,编译器将指出未定义main( )函数。

存在一些例外情况。例如,在Windows编程中,可以编写一个动态链接库(DLL)模块,这是其他Windows程序可以使用的代码。由于DLL模块不是独立的程序,因此不需要main( )。用于专用环境的程序—如机器人中的控制器芯片—可能不需要main( )。有些编程环境提供一个框架程序,该程序调用一些非标准函数,如_tmain( )。在这种情况下,有一个隐藏的main( ),它调用_tmain( )。但常规的独立程序都需要main( ),本专栏讨论的都是这种程序。

posted @ 2022-08-18 23:06  IG-Rookie  阅读(48)  评论(0)    收藏  举报