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就是了。