一个C++程序可能包含许多独立开发的部分,例如函数(见2.2.1节和第12章)、用户自定义类型(见2.3节,3.2节和第16章)、类层次(见3.2.4节和第20章)和模板(见3,4节和第23章)等。因此构建C++程序的关键就是清晰地定义这些组成部分之间的交互关系。
    第一步也是最重要的一步,是将某个部分的接口和实现分离开来。在语言层面,C++使用声明来描述接口。声明( declaration)指定了使用某个函数或某种类型所需的所有内容。例如:

    1. double sqrt(double) //这个平方根函数接受一个 double,返回值也是一个 double
    2. class vecto
    3. {
    4. public
    5. Vector(int s);
    6. double& operator(int i);
    7. int size();
    8. private:
    9. double* elem; //elem指向一个数组,该数组包含sz个 double
    10. int sz;
    11. };

    这里的关键点是函数体,即函数的定义( definition)位于“其他某处”。在此例中,我们可能也想让 Vector的描述位于“其他某处”,不过,我们将稍后再介绍相关内容(抽象类型,见3.2.2节)。sqrt()的定义形如下面的形式:

    1. double sqrt(double d) //sqrt()的定义
    2. {
    3. //求解平方根的算法,与数学教科书中并无二致
    4. }

    寸于 Vector来说,我们需要定义全部3个成员函数:

    1. Vector::Vector(int s) //构造函数的定义
    2. :elem{new double[s]},sz{s} //初始化成员
    3. {
    4. }
    5. double& Vector::operator[](int i) //下表运算符的定义
    6. {
    7. return elem[i];
    8. }
    9. int Vector::size() //size()的定义
    10. {
    11. return sz;
    12. }

    我们必须定义 Vector的函数,而不必定义sqrt(),因为它是标准库的一部分。但是这没什么本质区别:库其实就是一些“我们碰巧用到的其他代码”,编写这些代码的语言功能与我们平常使用的那些没什么区别。