Di seguito c'è una pseudo dichiarazione per un'eredità multilivello.
Base class ( protected int data)
derived1 : virtual public base ( protected int data1 )
derived2 : virtual public base ( protected int data2)
derived3 : derived1,derived2 ( private int data3 )
Main(){ base b; derived1 d1; derived2 d2; derived3 d3; }
sizeof(b) // 4 which is correct as only int (4bytes)
sizeof(d1) // 12 why not 8 -> 4(base) + 4(derived)
sizeof(d2) // ??? whatever applies above should apply here
sizeof(d3) // 24 why not 12 -> 4(base) + 4(derived1/derived2) + 4(d3).
Anche le dimensioni includono anche tabelle virtuali. Anche qui non può esserci una tabella virtuale in quanto non è definita alcuna funzione virtuale. Aiutatemi per chiarire il mio dubbio.
PS: Quello che ho capito finora:
Unless the function is declared virtual in base class,
base *bptr; derived d; bptr = &d; bptr->fun(); // will call the base class function.
But if the fun() is declared virtual then the above code will call derived class fun().