Could someone tell me why/how it is possible to declare a pointer to a 
base class and use that pointer to declare and point to an object an 
inherited (larger) class on the heap.

I guess my question is what exactly gets allocated on the heap in this 
case? Is it an "Under" object or an "Over" object?

Here's a small code that demonstrates it.

#include<iostream>
using namespace std;

class Under
{
public:
   void ImUnder() {cout << "I'm Under" << endl;};
};

class Over : public virtual Under
{
public:
   void ImOver() {cout << "I'm Over" << endl;};
};

int main()
{
   cout << "Test inheritance ---------" << endl;
   Over o;
   o.ImUnder();
   o.ImOver();

   cout << "Test access to objects on the heap ---- pUnder to Under object" 
<< endl;
   Under *pu;
   pu = new Under; // This pu does not have Over in scope.
   pu->ImUnder();
   cout << "Test access to objects on the heap ---- pOver to Over object" 
<< endl;
   Over *po;
   po = new Over;
   po->ImOver();
   po->ImUnder();
   delete pu;
   cout << "The following is the part I don't understand" << endl;
   cout << "Test access to objects on the heap ---- pUnder to Over object 
--- why does this work?" << endl;
   pu = new Over;
   pu->ImUnder();
   // pu->ImOver(); // This pu still does not have Over in scope
   return(0);
}

Reply via email to