14/06/10 10:11
Premoli
ciao a tutti!!!
Stavo studiando un po' il c++ e arrivato all'ereditarietà sto trovando difficoltà a capire una cosa:
Quando vengono ereditate più classi base viene introdotto un elemento di ambiguità, infatti in questo programma:
codepad.org/…
la classe base è ereditata sia da derived1 che da derived2 successivamente derived3 eredita sia derived1 che derived2 quindi in derived3 sono presenti due copie di base pertanto se nel main scrivessi:
derived3 O;
O.i=30;
verrebbe generato un errore perché i è ambiguo, il tutto si potrebbe risolvere o applicando l'operatore :: però così l'oggetto avrebbe ancora due copie di base, oppure si potrebbero usare classi basi virtuali come in questo caso:
codepad.org/…
quindi credo che fin qui sia tutto giusto, il dubbio mi sorge riguardo alla sizeof()
nel primo caso si ha:
sizeof(base)=4; ok giusto contiene solo un int
sizeof(derived1)=8 e sizeof(derived2)=8 ok anche in questo caso
invece non riesco a capire perché sizeof(derived3)=20
nel secondo caso le cose mi sono ancora meno chiare infatti ereditando base come virtual i risultati sono questi:
sizeof(base)=4; ok...
sizeof(derived1) e sizeof(derived2)=12 perché?
sizeof(derived3)=24 perché?
chiedo scusa per la lunghezza del post... e vi ringrazio anticipatamente per le eventuali risposte...
Stavo studiando un po' il c++ e arrivato all'ereditarietà sto trovando difficoltà a capire una cosa:
Quando vengono ereditate più classi base viene introdotto un elemento di ambiguità, infatti in questo programma:
codepad.org/…
la classe base è ereditata sia da derived1 che da derived2 successivamente derived3 eredita sia derived1 che derived2 quindi in derived3 sono presenti due copie di base pertanto se nel main scrivessi:
derived3 O;
O.i=30;
verrebbe generato un errore perché i è ambiguo, il tutto si potrebbe risolvere o applicando l'operatore :: però così l'oggetto avrebbe ancora due copie di base, oppure si potrebbero usare classi basi virtuali come in questo caso:
codepad.org/…
quindi credo che fin qui sia tutto giusto, il dubbio mi sorge riguardo alla sizeof()
nel primo caso si ha:
sizeof(base)=4; ok giusto contiene solo un int
sizeof(derived1)=8 e sizeof(derived2)=8 ok anche in questo caso
invece non riesco a capire perché sizeof(derived3)=20
nel secondo caso le cose mi sono ancora meno chiare infatti ereditando base come virtual i risultati sono questi:
sizeof(base)=4; ok...
sizeof(derived1) e sizeof(derived2)=12 perché?
sizeof(derived3)=24 perché?
chiedo scusa per la lunghezza del post... e vi ringrazio anticipatamente per le eventuali risposte...
aaa