|
|
Having declared our user types, we now want to be able to easily create, insert, and remove Modules and Transport_Times from the Product. Once the user types have been created as just described, then we can statically declare the objects that are represented in Figure 1:
Product widget;
Module m0("A");
Module m1("D");
Module m2("F");
Module m3("C");
Module m4("J");
Module m5("M");
Module m6("B");
Module m7("K");
Module m8("Z");
Transport_Time t0(&m0, &m1, 5);
Transport_Time t1(&m0, &m2, 1);
Transport_Time t2(&m1, &m3, 2);
Transport_Time t3(&m1, &m4, 0);
Transport_Time t4(&m5, &m4, 0);
Transport_Time t5(&m3, &m6, 0);
Transport_Time t6(&m4, &m7, 6);
Transport_Time t7(&m4, &m6, 7);
Transport_Time t8(&m7, &m8, 8);
Transport_Time t9(&m6, &m8, 9);
Note that we have here attached variable names to the newly-created Modules and Transport_Times: if many such declarations are to be made and ultimately used, these individual names are awkward at best. We'll see in the sections, ``Vertex Constructors and Destructors'', and ``Edge Constructors and Destructors'', that there are ways to avoid this problem: however, for simplicity let's continue with these for now.
To insert and remove Modules and Transport_Times from the Product, simply
.
.
.
widget.insert(&m0);
widget.insert(&t0); etc. .
.
.
widget.remove(&m0);
widget.remove(&t0); etc. .
.
.
using member functions of the Graph class from which Product widget is derived. Note that insert and remove take pointer arguments, as we described in the section, ``What is a Graph?''.
The destruction of these statically declared objects happens automatically when these objects go out of scope, as with any other object type in C++. More information on Graph class object destruction can be found in the sections, ``Graph Constructors and Destructors'', ``Vertex Constructors and Destructors'', and ``Edge Constructors and Destructors''.