Salve ragazzi sto avendo un problema utilizzando le funzioni virtuali ( polimorfismo run-time ) .
Il problema lo riscontro con la sizeof dei miei oggetti .
Sto studiando dell'ereditarietà multipla con le classi "Person" , "Student" , "Employee" e "Student-Employee" . Le relazioni sono : student e employee derivano da person e student-employee deriva da student ed employee .
Sono presenti funzioni virtuali e quindi un aumento di 4byte della sizeof , dovuto al puntatore alla vtable e inoltre un aumento di 4byte dovuto al puntatore all'istanza di classe person contenuto in student ed employee ( ereditarierà virtuale ) .
Le mie classi e il main seguono :
class Person {
public:
char no[5];
Person(){
cout << "p" <<endl;
}
virtual void DoSomething(){
cout << "1"<<endl;
}
void inserisci_nome(char insnm[5]){
strcpy(no, insnm);
}
};
class Student : virtual public Person {
public:
Student(){
cout << "s" <<endl;
}
void DoSomething(){
cout << "2"<<endl;
}
};
class Employee : virtual public Person {
public:
Employee(){
cout << "e" <<endl;
}
void DoSomething(){
cout << "3"<<endl;
}
};
class Student_Employee : public Student,
public Employee {
public:
Student_Employee(){
cout << "se" <<endl;
}
void DoSomething(){
cout << "4"<<endl;
}
};
int main(){
Person P ;
Student S;
Employee E;
Student_Employee SE;
cout << sizeof(P)<<endl;
cout << sizeof(S)<<endl;
cout << sizeof(E)<<endl;
cout << sizeof(SE)<<endl;
system("pause");
return 0;
}
I risultati che ottengo sono :
P->12
S->20
E->20
SE->24
Non riesco a giustificare tali valori delle sizeof. Spero qualcuno più esperto di me possa aiutarmi.Grazie in anticipo .