Can anyone tell the exact reason for the output of the following code in C++ ?The output that I received for the code is included in header comments. What does it have to do with virtual table and v pointer.
/* sizeof(Empty) 1                                                                                
 sizeof(Derived1) 1 
 sizeof(Derived2) 8 
 sizeof(Derived3) 1 
 sizeof(Derived4) 16 
 sizeof(Dummy) 1
*/
#include <iostream>
using namespace std;
class Empty
{};
class Derived1 : public Empty
{};
class Derived2 : virtual public Empty
{};
class Derived3 : public Empty
{    
char c;
};
class Derived4 : virtual public Empty
{
char c;
};
class Dummy
{
 char c;
};
int main()
{
    cout << "sizeof(Empty) " << sizeof(Empty) << endl;
    cout << "sizeof(Derived1) " << sizeof(Derived1) << endl;
    cout << "sizeof(Derived2) " << sizeof(Derived2) << endl;
    cout << "sizeof(Derived3) " << sizeof(Derived3) << endl;
    cout << "sizeof(Derived4) " << sizeof(Derived4) << endl;    
    cout << "sizeof(Dummy) " << sizeof(Dummy) << endl;
    return 0;
}