总结:
1) 类的所有对象都指向一个虚函数表, 也就是说虚函数表是由类来维护的, 在编译的时候就已经确定了
2) 对象的大小,
2.1) 当类中没有虚函数时,并没有一个指针指向虚函数表, 只有当有虚函数的时候才有指针。
2.2) 当类中有静态变量时, 对象的大小不会因为静态变量的而改变, 静态变量并不在对象中
2.3) 对象中只会有非静态的成员变量, 包括本身的和父类的
2.4)内存对齐的问题
例子:
class test{
};
class Base1{
public:
Base1(){};
~Base1(){};
static int test1;
int test2;
virtual void testfunc2(){};
};
class Base2{
public:
static int test1;
int test2;
virtual void testfunc2(){};
};
class Derive1:public Base1{
public:
int test;
virtual void s() {};
};
class multiDerive: public Base1, Base2{
};
int _tmain(int argc, _TCHAR* argv[])
{
test a;
Base1 obj;
Derive1 der;
multiDerive multiobj;
std::cout<< sizeof(a) <<std::endl;
std::cout<< sizeof(obj) <<std::endl;
std::cout<< sizeof(der) <<std::endl;
std::cout<< sizeof(multiobj) <<std::endl;
}
输出:(64位环境)
1
16
24
32 //多重继承
虚多重继承: