It depends on how you model it, actually.
One way of modelling an aeroplace is as an object that has wheels, wings, etc.
The problem with this approach comes if you also wish to implement an Automobile (which also has wheels, but does not have wings). Both the Aeroplane and Automobile classes would need to separately implement behaviours related to having a set of wheels.Code:class Aeroplane { // other stuff Wings wings; Wheels wheels; };
But let's say we can define a couple of classes named HasWings and HasWheels, and those classes have data structures and implement behaviour related to having and operating sets of wings and wheels respectively. We could then do this;
and have Automobile only inherit from HasWheels.Code:class Aeroplane : public HasWings, public HasWheels { // other stuff };
In the example I describe above, the HasWings and HasWheels classes could potentially provide both interface and behaviour - including containment of data. While they would not necessarily be instantiable (i.e. one shouldn't create raw instances of them, so would make their destructor pure virtual) they need not be pure interface classes.