The most complex semantic issues arising from the kind of multiple inheritance best exemplified by C++ concern subobject selection, which occurs with method calls and instance variable references. Multiple inheritance, the dominance rule for disambiguation, and the presence of virtual and non-virtual base classes necessitate a semantic model that differentiates repeated inheritance on both the class and member levels. By abstracting the notion of a subobject, we present a practical, coherent algebra for determining the appropriate subobject in the face of these complications. This model provides an essential level of understanding for both language theorists and implementors.