struct s1
{
};
struct s2
{
void f(){ cout << "void f()" << endl; }
};
class c0
{
};
class c1
{
public:
virtual void f(int){ cout << "virtual void f()" << endl; }
void g(int){ cout << "void g()" << endl; }
};
class c2 : public c1
{
public:
void f(int){ cout << "void f()" << endl; }
};
class c3 : public c2
{
public:
private:
int a;
};
class c4
{
private:
int a;
};
class c5
{
public:
void f(){ cout << "void f()" << endl; }
private:
int a;
};
class c6
{
public:
virtual void f(){ cout << "virtual void f()" << endl; }
virtual void g(){ cout << "virtual void g()" << endl; }
};
在sizeof(s1-2/c0-6)後的結果是111448444,上網查證了一下是這麼個回事
必須要用缺省1byte來使得空類在不同的地址,而每個類維護了一個虛函數表(有虛函數的話),因此需要一個指針,但是如果一個類繼承自N個類,每個類都有虛函數的話,那麼這個類的sizeof就==對齊後的字節數+N*4,再者,如果這個類又定義了虛函數,那麼再加4就是了。