beauvais机场:c++问题,请高手尽快回答,谢谢

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 19:49:14
1.class A
{
public:
virtual void foo() { cout << "A::foo() is called" << endl;}
};

class B: public A
{
public:
virtual void foo() { cout << "B::foo() is called" << endl;}
};
A * a = new B();
a->foo(); //
输出什么
2.void main()
{
struct A
{

} ;
printf("%d",sizeof(A));

}
输出什么
写明原因

1.输出B::foo() is called
因为foo在基类A中是虚函数,当然在派生类B中也是虚函数了.因为有虚函数的类的实例都会包括一个虚函数表的指针,这个虚函数表的指针指向当前实例需要调用的虚函数表,此表指出了,该实例调用的函数的地址.当将类B的实例付值给指针,通过指针调用虚函数时,将根据类B的虚函数表指针,调用相应的虚函数.所以会调用类B中的虚函数.

2.输出1
“空结构体”(不含数据成员)的大小不为0,而是1。试想一个“不占空间”的变量如何被取地址、两个不同的“空结构体”变量又如何得以区分呢于是,“空结构体”变量也得被存储,这样编译器也就只能为其分配一个字节的空间用于占位了。