源码文件结构

要使用一种编程语言其实并不复杂,语言的基本语法都是固定格式的,难点在于将它们组合在一起来完成完整功能。本指南中的语言要点将只陈列各项语法结构,以及基本使用方法和常见技巧,对于其中原理将不再叙述,有需要的读者可以选择向更加详细的 C++教程求索。

C++语言是面向对象与面向过程的集合体,其书写自由程度较大,可以根据需要选择不同的实现方式。但 C++源码中的整体代码结构是有一定规律的。

首先,C++的源码是分为两部分的,第一部分为声明部分,第二部分为定义部分。

声明部分主要用于将变量、命名空间、函数、类等名称引入到程序中,并且制定了类型信息以及正在声明的对象的其他特征。C++中的元素(包括变量、命名空间、函数、类等)都必须先完成声明后才可以使用。一般情况下,声明都放置在.h或者.hpp头文件中,但变量不可在头文件中声明。

前向声明

对于一些特殊的情况,例如两个类的声明中产生了交叉使用,即类A使用了类B,但类B是在类A之后定义的,这在C++中是不允许的,因为类A在使用类B的内容时,类B还未声明,此时可以将类B的声明进包含类B名称的部分放置在类A的声明前面,来使类A可以使用类B的内容,并在类A之后再定义类B的详细内容,这种声明方式称为前向声明。具体可见以下示例。

// 前向声明类B
class B;

// 声明类A,其中返回了类B的一个实例作为返回值
class A {
    public:
        B calculate();
}

// 这里才是类B的完整声明
class B {
    public:
        int numbers();
}

Tip

前向声明是一个不完整的声明,仅可用于定义指针、引用以及函数形参等,但不可定义对象。

定义部分主要用于将声明部分所声明的内容具现化。每一个给定的元素在程序中只能包含唯一的定义,但声明与定义间可以是多对一的关系。定义一般放置在.c或者.cpp文件中。

其次,不管在放置声明的头文件中,还是在放置定义的源码文件中,所有内容的排布均是有规律的。一般会按照以下顺序依次书写。

  1. #include引用。
  2. 预处理指令。
  3. 命名空间定义或引用。
  4. 自定义类型声明。
  5. 声明,包括类声明、函数声明等。
  6. 声明内容的定义,包括类成员、函数等。
  7. main()主函数。

书写时需要注意,在每一部分的内容中都不要违反先声明后使用的原则。