我说的详细点:
含有纯虚函数的类是虚基类,是不能够实例化的,所以你的main函数里面的Base a;是错误的,还值得注意的一点是,纯虚函数在基类里面是不能够定点函数体的且必须在派生类中被覆盖(越位override).
你应该是用这个程序来验证c++运行时的多态性,先定义基类的指针,然后指向派生类来实现多态性.
Test a;
Base *p=&a;
p->fun();
唉,我不知道大家为什么喜欢用虚基类这个词,不过像
class Base{
public:virtual void fun()=0;
};
这样包含纯虚函数的类应该叫做抽象类而不是虚基类,所谓虚基类,比如下面
class A{....};
class B:virtual public A {....};
class C:virtual public A {....};
这里,A就叫做B,C的虚基类,因为B,C在继承A时用了“virtual继承”,这种继承方法用于多重继承时,防止“钻石型多重继承”。比如:
class D: public B,pubilc C {....};
此时“virtual继承”可以保证D只保存一份A的成员变量。
呵呵,认真应对所讨论的问题而已,大家勿怪