15.2.3. Conversions and Inheritance
Understanding conversions between base and derived classes is essential to understanding how object-oriented programming works in C++.
Ordinarily, we can bind a reference or a pointer only to an object that has the same type as the corresponding reference or pointer (§2.3.1, p. 51, and §2.3.2, p. 52) or to a type that involves an acceptable
const conversion (§4.11.2, p. 162). Classes related by inheritance are an important exception: We can bind a pointer or reference to a base-class type to an object ...