questa è una specie di domanda sui compiti. Per il codice seguente,come determinare sizeof class con funzioni virtuali?
#include <iostream>
using namespace std;
class A
{
public:
virtual void f(){}
};
class B
{
public:
virtual void f2(){}
};
class C: public A, public B
{
public:
virtual void f3(){}
};
class D: public C
{
public:
virtual void f4(){}
};
int main()
{
cout<<sizeof(D)<<endl;
}
L'output è: 8
Qualcuno potrebbe spiegare come è di 8 byte? Se l'implementazione di vtable dipende dal compilatore, che cosa dovrei rispondere per questo tipo di domande nelle interviste? Che dire delle classi base virtuali?
EDIT: sto lavorando su una piattaforma a 32 bit.
L'operatore 'sizeof' non è veramente significativo per i tipi di classe nella maggior parte degli scenari. Se stai facendo affidamento sulle dimensioni di una classe per qualcosa, le probabilità sono buone (anche se non al 100%) che il tuo progetto sia andato male da qualche parte. Puoi approfondire ciò che stai cercando di realizzare nei tuoi compiti, o è questa la vera domanda dei compiti? (Se è il secondo e l'istruttore non ha specificato un particolare compilatore o piattaforma, l'unica risposta corretta è "la dimensione della classe è un dettaglio di implementazione.") –
@ Jonathan: ho affrontato questa domanda in un test scritto molto tempo fa, non esisteva alcuna opzione del tipo "dipendente dall'implementazione" in più scelte date. Il nome dell'azienda è Phil ***. Penso, non posso menzionare il nome della compagnia qui :) – bjskishore123
Bene, allora la prova scritta non consentiva la risposta corretta. Questo non lo rende scorretto. Né "8 byte" né "due puntatori" né "64 bit" è la risposta giusta, anche se è accurata su una particolare combinazione sistema/compilatore. –