virtual在修饰函数,与修饰继承关系时对类的大小是有区别的,请看下面的代码:
virtual 有虚函数表指针,占4个字节。
#include<iostream>
using namespace std;
class Base
{
};
class Base1 :public Base
{
};
class Base2:virtual public Base
{
};
class Base3 :virtual public Base2
{
};
class Base4 :virtual public Base2
{
public:
//虚函数,纯虚函数,存储了虚函数表的地址。
virtual void go1() = 0;
virtual void go()
{
}
};
void main()
{
cout << sizeof(Base) << endl;
cout << sizeof(Base1) << endl;
cout << sizeof(Base2) << endl;
cout << sizeof(Base3) << endl;
cout << sizeof(Base4) << endl;
cin.get();
}