In Item 27 of "Effective C++" (3rd Edition, Page 118), Scott Meyers said:
class Base { ... };
class Derived: public Base { ... };
Derived d;
Base *pb = &d;
Here we're just creating a base class pointer to a derived class object, but sometimes, the two pointers will not be the same. When that's the case, an offset is applied at runtime to the Derived*
pointer to get the correct Base*
pointer value.
This last example demonstrates that a single object (e.g., an object of type Derived
) might have more than one address (e.g., its address when pointed to by a Base*
pointer and its address when pointed to by a Derived*
pointer).
Here is a bit hard to understand. I know that a pointer to the base class can point to an object of the derived class at runtime, this is called polymorphism or dynamic binding. But does the derived class object really have more than 1 address in the memory?
Guess I have some misunderstanding here. Could someone give some clarification? Maybe this has something to do with how polymorphism is implemented in the C++ compiler?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…