8.8. Rectangles¶
Now let’s say that we want to create a structure to represent a rectangle. The question is, what information do I have to provide in order to specify a rectangle? To keep things simple let’s assume that the rectangle will be oriented vertically or horizontally, never at an angle.
There are a few possibilities: I could specify the center of the rectangle (two coordinates) and its size (width and height), or I could specify one of the corners and the size, or I could specify two opposing corners.
The most common choice in existing programs is to specify the upper left
corner of the rectangle and the size. To do that in C++, we will define
a structure that contains a Point
and two doubles.
struct Rectangle {
Point corner;
double width, height;
};
Notice that one structure can contain another. In fact, this sort of
thing is quite common. Of course, this means that in order to create a
Rectangle
, we have to create a Point
first:
Point corner = { 0.0, 0.0 };
Rectangle box = { corner, 100.0, 200.0 };
This code creates a new Rectangle
structure and initializes the
instance variables. The figure shows the effect of this assignment.
We can access the width
and height
in the usual way:
box.width += 50.0;
cout << box.height << endl;
In order to access the instance variables of corner
, we can use a
temporary variable:
Point temp = box.corner;
double x = temp.x;
Alternatively, we can compose the two statements:
double x = box.corner.x;
It makes the most sense to read this statement from right to left:
“Extract x
from the corner
of the box
, and assign it to the
local variable x
.”
While we are on the subject of composition, I should point out that you
can, in fact, create the Point
and the Rectangle
at the same
time:
Rectangle box = { { 0.0, 0.0 }, 100.0, 200.0 };
The innermost squiggly braces are the coordinates of the corner point;
together they make up the first of the three values that go into the new
Rectangle
. This statement is an example of nested structure.
The active code below uses the Rectangle
structure. Feel free to
modify the code and experiment around!
double y = corner.box.y;
-
Try again.
double y = box.corner.y;
-
Correct!
double y = corner.y;
-
Try again.
double y = box.y;
-
Try again.
Q-2: How can you combine these two statements into one?
Point temp = box.corner;
double y = temp.y;
def main() { Point corner = ( 0.0, 0.0 ); Rectangle box = { ( 0.0, 0.0 ), 100.0, 200.0 } Rectangle box = { { 0.0, 0.0 }, 100.0, 200.0 }; Point corner = { 0.0, 0.0 }; Rectangle box = { corner, 100.0, 200.0 }; }