第二章:C++程序分析

一、C++程序分析

C++程序由类组成,类中包含成员函数和成员变量。现在使用第一章中的HelloWorld程序来分析一个C++程序的组成部分:

// 包含iostream的预处理指令
#include <iostream>
// 程序启动:函数块main()
int main() {
	// 输出
	std::cout << "Hello World!" << std::endl;
	// 将值返回给操作系统
	return 0;
}

这个C ++程序可分为两部分:以#开头的预处理指令,和以int main()开头的程序主体。

1、预处理指令 # include

预处理程序在程序编译之前运行,预处理指令以井号#开头,格式为#include <文件名>,作用是告诉预处理器获取文件的内容(在本例中为iostream)并将它们包含在指令所在的行中。iostream是一个标准的头文件,在上面程序中,它允许程序使用std :: cout在屏幕上显示“Hello World”。 换句话说,编译器能够编译包含std :: cout的代码,因为我们指示预处理程序在第2行中包含std :: cout的定义。
一般C ++应用程序包括开发环境提供的标准头文件和程序员创建的头文件。标准头文件使用尖括号<>声明,程序猿创建的头文件一般使用引号:
#include “…relative path to head file”

2、程序主体 main()

在预处理指令下面是程序的主体,用函数main()表示,C ++程序的执行从这里开始。main()函数前一般有一个类型声明,表示函数的返回值类型,在我们的示例代码中是int类型。
有的main()函数是下面的形式:
int main (int argc, char* argv[])
括号中是提供给程序的参数, 该程序允许用户使用命令行参数启动它,如:program.exe /DoSomethingSpecific
/DoSomethingSpecific 是操作系统传递给该函数的参数,在main (int argc, char* argv[])接收该参数。
cout即‘console-out’,表示控制台输出,cout是标准std命名空间中定义的流(因此写作std :: cout),在这一行代码中,我们使用流插入运算符<<将“Hello World”文本放入此流中,并使用std::endl结束一行,将其插入流中类似于插入回车符。每次需要将新实体插入流中时,都会使用流插入运算符<<。
C ++中的流的优点是不同的流类型支持类似的流语义,以使用相同的文本执行不同的操作,例如在文本中插入流,使用std::fstream而不是std :: cout,但仍然使用相同的流插入运算符<<。

3、返回值

除非另外明确指定,否则C ++中的函数需要一个返回值。main函数的返回值常为整型,返回给操作系统。大多数操作系统接收到自然终止的应用程序的返回值。在许多情况下,一个应用程序由另一个应用程序启动,并且父应用程序(启动)想要知道子应用程序(已启动)是否已成功完成其任务。 程序员可以使用main()的返回值将成功或错误状态传递给父应用程序。
一般在成功时返回0,出错时返回-1。但是,返回值是一个整数,程序员可以使用整数灵活地传达许多不同的成功或失败状态。
C ++是区分大小写的语言。因此,如果写的是Int而不是int,或Std :: Cout而不是std :: cout,会导致编译失败。
当返回值类型定义为void时,表示函数不返回任何值。

二、命名空间的概念

上述代码中的std :: cout表示,我们要使用的(cout)指令位于标准(std)命名空间中,而不是别的cout。命名空间的使用避免命名冲突。
我们使用std(“standard”)命名空间来调用已由ISO标准委员会批准的函数,流和实用程序。
除了std :: cout的方式外,还有下面两种使用命名空间的方式。
第一种方式如下所示,这种方式避免了重复调用std关键字:

// 预处理指令
#include <iostream>

int main() 
{
	// 告诉编译器要搜索的命名空间
	using namespace std;

	/* 使用std :: cout写入屏幕 */
	cout << "Hello World" << endl;

	// 返回一个值给操作系统
	return 0;
}

第二种方式如下:

// 预处理指令
#include <iostream>

int main() 
{
	using std::cout;
	using std::endl;

	/* 使用std :: cout写入屏幕 */
	cout << "Hello World" << endl;

	// 返回一个值给操作系统
	return 0;
}

上面两种方式的不同之处在于,‘using namespace std’允许使用std命名空间中的所有指令(cout,cin等)而不显式包含命名空间限定符std ::,对于std :: cout,限制了使用的std命名空间中的指令。

三、C++中的函数

函数的使用使得我们可以按照不同功能等将代码分块,在需要的地方调用:

#include <iostream>
using namespace std;

// 声明一个函数
int DemoConsoleOutput();

int main() 
{
	// 调用函数
	DemoConsoleOutput();

	return 0;
}

// 定义前面声明的函数
int DemoConsoleOutput()
{
	cout << "This is a simple string literal" << endl;
	cout << "Writing number five: " << 5 << endl;
	cout << "Performing division 10 / 5 = " << 10 / 5 << endl;
	cout << "Pi when approximated is 22 / 7 = " << 22 / 7 << endl;
	cout << "Pi is 22 / 7 = " << 22.0 / 7 << endl;

	return 0;
}

这段代码首先声明函数,它基本上告诉编译器我们要创建一个名为DemoConsoleOutput()的函数,该函数返回一个int(整数)。 此声明使编译器能够编译main函数后面的DemoConsoleOutput()函数。在main()中调用DemoConsoleOutput()。
当然,也可以使用下面的方式,同时声明和定义函数,下面的代码中直接在main函数调用的函数中返回一个值给操作系统:

#include <iostream>
using namespace std;

// 函数声明和定义
int DemoConsoleOutput()
{
	cout << "This is a simple string literal" << endl;
	cout << "Writing number five: " << 5 << endl;
	cout << "Performing division 10 / 5 = " << 10 / 5 << endl;
	cout << "Pi when approximated is 22 / 7 = " << 22 / 7 << endl;
	cout << "Pi is 22 / 7 = " << 22.0 / 7 << endl;

	return 0;
}

int main() 
{
	return DemoConsoleOutput();
}

四、使用控制台写入和读取信息:

使用std :: cout将文本数据写入控制台,并使用std :: cin来读取控制台中由键盘输入的文本和数字。cout上面已经使用过,cin的使用方式如下:
std::cin >> Variable;
也可同时输入多个变量:
std::cin >> Variable1 >> Variable2;
相关代码:

#include <iostream>
#include <string>
using namespace std;

int main() 
{
	int inputNumber;
	cout << "Enter an integer: ";
	// 存储用户输入的整数
	cin >> inputNumber;

	cout << "Enter your name";
	string inputName;
	cin >> inputName;

	cout << inputName << " entered: " << inputNumber << endl;

	return 0;
}

输出:
Enter an integer: 6
Enter your name77
77 entered: 6

总结

首先分析了一个简单C ++程序的两个基本组成部分:预处理指令和main函数,并介绍了函数返回值的相关内容,然后介绍了命名空间的相关知识,以及函数的声明和使用,最后介绍了简单的控制台输入输出指令。

虽然到目前为止学习的内容都比较简单基础,但是在学习的过程中还是学到了很多之前没注意的小问题,比如符号<<的作用、main函数括号中参数的作用等。总之,一步一个脚印,把基础打劳。

此文供学习交流使用,若有错误之处欢迎共同交流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值