修改如下,供参考:
在循环体最后再加上输入y
你输入n的代码要放到循环里面啊,否则n都不变的
基类只打印自己的,派生类将重写的不打印,只打印自己的
基类大小不变,派生类的大小和无重写几乎一样,不过多了一个用于区分对象的0,这个0加进了派生类数据成员和指向基类虚表的指针之间
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
b = 10;
}
virtual void fun0()
{
cout << "Base::fun0()" << endl;
}
virtual void fun1()
{
cout << "Base::fun1()" << endl;
}
virtual void fun2()
{
cout << "Base::fun2()" << endl;
}
int b;
};
class Derived :virtual public Base
{
public:
Derived()
{
d = 20;
}
virtual void fun0()
{
cout << "Derived::fun0()" << endl;
}
virtual void fun1()
{
cout << "Derived::fun1()" << endl;
}
virtual void fun5()
{
cout << "Derived::fun5()" << endl;
}
int d;
};
typedef void(*vpf)();
void Printvpf()
{
Base b;
Derived d;
//Base* p = &d;
cout << "Base::vpf" << endl;
vpf* n = (vpf*)*(int *)(&b);
while (*n)
{
(*n)();
n++;
}
cout << "Derived::vpf" << endl;
vpf* pn = (vpf*)*(int *)(&d);
while (*pn)
{
(*pn)();
pn++;
}
cout << sizeof(Base) << endl;
cout << sizeof(Derived) << endl;
}
int main()
{
Printvpf();
system("pause");
return 0;
}