// dfs.mro.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include using namespace std; struct A { int data; A () { cout << "A() construct " << endl; } ; A (int init) : data(init) { cout << "A() construct with custom data " << init << endl; }; }; struct B : virtual public A { int a; B () : A(10) { cout << "B() construct " << endl; } ; }; struct C : virtual public A { int a; C () : A(20) { cout << "C() construct " << endl; } ; }; struct D : virtual public B, public C { // NOTE ! // D gets two different 'a' variable instances // since it inherits two classess with a variable // // but only a single data instance // since it inherits only one clas with data instance D () : A(40) { cout << "D() construct " << endl; } ; }; int main() { D* t1 = new D; // data is a single variable among all classes cout << "t1->B::data is " << t1->B::data << endl ; cout << "t2->C::data is " << t1->C::data << endl; cout << "t3->data is " << t1->data << endl; // virtual class inheritance brings a 4 bytes overhead cout << "size of A " << sizeof (A) << endl; cout << "size of B " << sizeof (B) << endl; cout << "size of C " << sizeof (C) << endl; cout << "size of D " << sizeof (D) << endl; return 0; }