![]() |
![]() |
![]() |
![]() |
![]() |
|
Having defined the container, railroad_car, box, and
cylinder classes, you can now define the classes at the bottom of
the class hierarchy:
class box_car : public railroad_car, public box {
public: box_car ( ) {height = 10.5; width = 9.2; length = 40.0;}
};
class tank_car : public railroad_car, public cylinder {
public: tank_car ( ) {radius = 3.5; length = 40.0;}
};
class engine : public railroad_car {
public: engine ( ) { }
};
class caboose : public railroad_car {
public: caboose ( ) { }
};
Note that none of the class definitions just shown includes any member
variables. All box_car, tank_car, engine, and
caboose objects have member variables, however, because of the
subclasssuperclass relations that link the box_car,
tank_car, engine, and caboose classes to various
superclasses.
Note also that two of the four definitions specify two base classes; such definitions enable multiple inheritance.
Finally, note that the definitions of the box_car and
tank_car classes include default constructors that initialize
inherited member variables. These classes are sufficiently specific to
have sensible default member-variable values. Later, in
the hardcopy version of this book, you learn about another way to initialize inherited
member variables using constructors that explicitly call other
constructors.