虚函数与强制类型转换产生的问题
程序源代码:
#include <iostream>
using namespace std;
class Class1
{
public:
virtual void f()
{
cout<<"Virtual Function f() in Class1"<<endl;
}
void g()
{
cout<<"Function g() in Class1"<<endl;
}
};
class Class2
{
public:
virtual void f()
{
cout<<"Virtual Function f() in Class2"<<endl;
}
void g()
{
cout<<"Function g() in Class2"<<endl;
}
};
class Class3
{
public:
virtual void h()
{
cout<<"Virtual Function h() in Class3"<<endl;
}
};
void main(void)
{
Class1 obj1, *p_class1;
Class2 obj2;
Class3 obj3;
p_class1=&obj1;
p_class1->f();
p_class1->g();
cout<<"===========================\n";
cout<<"sizeof(Class1)"<<sizeof(Class1)<<" "
<<"sizeof(obj1)"<<sizeof(obj1)<<endl;
cout<<"===========================\n";
p_class1 = (Class1*)&obj2;
p_class1->f();
p_class1->g();
cout<<"===========================\n";
p_class1 = (Class1*) &obj3;
p_class1->f();
p_class1->g();
// p_class1->h();
}
===========================================================
环境:VC6.0 + winxp sp2
问题:
1:为什么sizeof(Class1)和sizeof(obj1)的大小为4?
2:p_class1 = (Class1*)&obj2;
p_class1->f();
p_class1->g();
这几句中,为什么p_class1->f();的输出结果是:"Virtual Function f() in Class2"?
3:p_class1 = (Class1*) &obj3;
p_class1->f();
p_class1->g();
// p_class1->h();
这几句中,为什么p_class1->h();是不对的?,
而p_class1->f();得输出结果是:"Virtual Function h() in Class3"?
p_class1->g();怎么也会有输出结果?