As a general rule, you should place member variables and member functions in classes such that two criteria are satisfied:
For example, the percentage_loaded
member variable is in the
container
class, because it is useful for all container
subclasses, although it is not useful for classes that are not
container
subclasses, such as the engine
and caboose
classes. Similarly, the year_built
member variable and the
age
member function are in the railroad_car
class, because
they are useful for all railroad cars, rather than just for those railroad
cars that happen to be containers.
On the other hand, there are two volume
member functions, because
the way that you compute the volume of a box is different from the way that
you compute the volume of a cylinder. Thus, there is duplication, but
there is no needless duplication.