现在假设我们要创建一个结构体来表示一个矩形。问题在于,我需要提供哪些信息来指定一个矩形?为了简化问题,我们假设矩形是垂直方向或水平方向的,没有倾斜角度。
存在几种可能:我可以指定矩形的中心(两个坐标)和大小(宽度和高度),我也可以指定矩形的一个角和矩形的大小,或是指定两个相对的角。
现有程序中最常见的选择是指定矩形的左上角和大小。在C++中,我们定义一个结构,包含着一个Point类型和两个double类型。
struct Rectangle {
Point corner;
double width, height;
};
注意到一个结构中可以包含另一个结构。事实上这种情况很常见。当然,这意味着为了创建一个Rectangle,我们得先创建一个Point:
Point corner = { 0.0, 0.0 };
Rectangle box = { corner, 100.0, 200.0 };
这段代码创建了一个新的Rectangle结构并对实例变量进行了初始化。下图展示了这些语句的效果。
我们可以用普通的方式来存取width和height:
box.width += 50.0;
cout << box.height << endl;
为了访问corner的实例变量,我们使用了一个临时变量:
Point temp = box.corner;
double x = temp.x;
或者我们可以把两条语句组合在一起:
double x = box.corner.x;
这条语句最好是从右向左读: "从box的corner中抽取x,然后把它赋给局部变量x。"
当我们谈到组合时,我必须指出,实际上你可以同时创建Point和Rectangle:
Rectangle box = { { 0.0, 0.0 }, 100.0, 200.0 };
最里面的大括号中是点corner的坐标;它们组成了新的Regtangle中三个值中的第一个。这条语句是嵌套结构的一个例子。