C++学习之二、C++程序基本结构概述

C++ 程序的基本结构是什么样的呢?

示例1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// Simpmul.cpp ------ 文件名存储后缀为 .cpp

#include <iostream> // C++ 预处理,相当于把 iostream 这个标准库文件复制粘贴到这里
void simpMul(int); // 函数原型

int main() // main 函数,程序入口
{
int table = 9;
simpMul(table);
return 0; // main() 函数返回值,main() 函数默认返回 0,也可省略此语句
}

/* 简易乘法表 */
void simpMul(int table)
{
using namespace std; // 名称空间,用在函数内,只能在这个函数中使用
for (int i = 1; i <= table; i ++)
{
for (int j = 1; j <= i; j ++)
{
cout << i << "*" << j << "=" << i*j << "\t";
}
cout << endl;
}
}

C++ 注释

C++ 注释以 // 打头,到行尾结束,也可以位于单独的一行上。

C++ 也支持 C 风格的注释,C 注释包括在符号 /**/ 之间,如:/* 简易乘法表 */

C++ 预处理和 iostream 文件

C++ 提供了两个用于处理输入和输出的预定义对象( cincout ),它们是 istreamostream 类的实例,这两个类是在 iostream 文件中定义的。

iostream 这样的文件叫做包含文件( include file ),也叫头文件( header file ),C 语言的传统是头文件使用扩展名 h,但 C++ 用法不同。现在,对老式 C 的头文件保留了扩展名 h ( C++ 程序仍然可以使用这种文件),而 C++ 头文件则没有扩展名。有些 C 头文件被转换为 C++ 头文件,这些文件被重新命名,去掉了扩展名 h (使之成为 C++ 风格的名称),并在文件名称前面加上前缀 c (表明来自 C 语言)。例如,C++ 版本的 math.h 为 cmath。有时头文件的 C 版本和 C++ 版本相同,而有时候新的版本做了一些修改。对于纯粹的 C++ 头文件(如 iostream)来说,去掉 h 不只是形式上的变化,没有 h 的头文件也可以包含名称空间。下表对头文件的命名约定进行了总结。

头文件类型 约定 示例 说明
C++ 旧式风格 以 .h 结尾 iostream.h C++ 程序可以使用
C 旧式风格 以 .h 结尾 math.h C、C++ 程序都可以使用,因为 C++ 兼容 C
C++ 新式风格 没有扩展名 iostream C++ 程序可以使用,可以使用名称空间特性 namespace xxx
转换后的 C 加上前缀 c,没有扩展名 cmath C++ 程序可以使用,可以使用不是 C 的特性,如 namespace xxx

名称空间 namespace

名称空间支持是一项 C++ 特性,名称空间提供了一种在大项目中避免名字冲突的方法。
在名称空间块内声明的符号被放入一个具名的作用域中,避免这些符号被误认为其他作用域中的同名符号。
多个名称空间块的名字可以相同。这些块中的所有声明在该具名作用域声明。

使用 using namespace xxx

如使用 using namespace std 编译指令包含该名称空间,后续使用该域中的对象或方法可以直接使用,如 coutcinendl 等。

使用 using xxx::xx

使用 using 指令只包含名称空间中的特定对象或方法,后续可以直接使用这些对象或方法,其它需要引用域对象。
如使用 using std::cout ,后面可以直接使用 cout,但是没有使用该指令的,如 endl,就需要引用域对象 std::endl

不使用 using 编译指令

不使用任何 using 指令,在需要使用域对象或方法时,需要引用名称空间。
std::cout, std::cin, std::endl

C++ 函数原型与函数定义

  • 函数原型:用于描述函数接口,描述函数的参数及返回值信息,头文件中的内容就是函数原型,没有具体的函数代码。
  • 函数定义:具体的函数实现代码,一般包含于库文件中。

Tips: C++ 程序应当为程序中使用的每个函数提供原型。

函数原型之于函数就像变量声明之于变量——指出涉及的类型。

1
2
3
4
5
6
double sqrt(double);    // 函数原型,没有具体代码

double sqrt(double d) // 函数定义
{
// 具体代码
}