C++语言程序设计

三、类对象成员
类数据成员也可以是另一个类的对象。例如，一个矩形数据可用两个点数据成员，分别表示矩形的左上角点和右下角点：
class Rectangle {
public:
Rectangle (int left, int top, int right, int bottom);
//...
private:
Point topLeft;
Point botRight;
};
矩形的构造函数也应该初始化两个类对象成员，假定Point类有构造函数，矩形两个数据成员topLeft和botRight可放在Rectangle构造函数的初始化表中初始化：
Rectangle::Rectangle (int left, int top, int right, int bottom)
: topLeft(left,top), botRight(right,bottom)
{
}
如果Point构造函数没有参数，或所有参数都有缺省的参数，上面的成员初始化表可以省略，但是，构造函数仍然被隐含地调用。
初始化化的顺序如下：首先topLeft的构造函数被调用，接着调用botRight的构造函数，最后调用Rectangle的构造函数。
TopLeft初始化在botRight之前的原因不是因为：在成员初始化表中，TopLeft位于botRight之前，而是因为在Rectangle类的定义中，TopLeft位于botRight之前。所以，如果构造函数的定义改成下面的形式，并不会影响到构造函数调用的顺序。
Rectangle::Rectangle (int left, int top, int right, int bottom)
: botRight(right,bottom), topLeft(left,top)
{
}
在与构造函数赋值相比，成员初始化列表占用较少的开销，因此具有较高的效率。更重要的是成员初始化列表是用来初始化类的const或引用类型数据成员的唯一方法，它们不能采用赋值操作。