实例分析:A类中内存对齐,所以int b;char c;占了8个字节(4x2),有一个指针指向虚表,4个字节,共12个字节,B类继承A类时,B并没有显示地给出虚函数声明,这是系统会按照以下规则来判断派生类中的函数成员是否是虚函数:1)函数名称 2)相同的参数个数和相同的参数类型 3)相同的返回值或是否满足类型兼并原则的指针和引用的返回值
#include <iostream>
using namespace std;
#include <cstdio>
#include <cstdlib>
class A{
public:
int b;
char c;
virtual void print(){
cout<<"this is a father's function!"<<endl;
}
};
class B : public A{
public:
void print(){// 此处virtual void print()的结果是一样的
cout<<"this is a children's function!"<<endl;
}
};
int main(){
cout<<sizeof(A)<<" "<<sizeof(B)<<endl;
system("pause");
}
如果再加上一个虚继承的指针,那么效果如下:
#include <iostream>
using namespace std;
#include <cstdio>
#include <cstdlib>
class A{
public:
int b;
char c;
virtual void print(){
cout<<"this is a father's function!"<<endl;
}
};
class B : virtual public A{
public:
void print(){
cout<<"this is a children's function!"<<endl;
}
};
int main(){
cout<<sizeof(A)<<" "<<sizeof(B)<<endl;
system("pause");
}