![]() |
![]() |
![]() |
![]() |
![]() |
|
Note, then, that part of the work done by add is actually done by
the two-argument constructor for the link class:
class link {
public:
link *next_link_pointer;
railroad_car *element_pointer;
link (railroad_car *e, link *l) {
element_pointer = e;
next_link_pointer = l;
}
};
The link constructor is called when a new
link object is created inside of the add member function:
class header {
public:
link *first_link_pointer;
header ( ) {
first_link_pointer = NULL;
}
void add (railroad_car *new_element) {
first_link_pointer = new link (new_element, first_link_pointer);
...
}
...
};
Note that the add member function arranges for the value of the
first_link_pointer variable to be the address of the new
link object. Thus, add reroutes the pointer in the
header object to point to the new link:
New | Old
| *-------* A header object
| | |
| *-------*
| | |
| *-------*
| |
Pointer rerouted | |
*-------------------------------*
| |
v |
*-------* | *-------* *-------* link
| | --------------------> | | ----> | 0 | objects
|-------| | |-------| |-------|
| | | | | | |
*-------* | *-------* *-------*
| | | |
v | v v
*-------* | *-------* *-------* railroad_car
| | | | | | | objects
|-------| | |-------| |-------|
| | | | | | |
|-------| | |-------| |-------|
| | | | | | |