1 #include2 using namespace std; 3 4 class base 5 { 6 public: 7 base(){} 8 virtual void fun(){cout<<"base.fun";} 9 };10 11 class derive:public base12 {13 public:14 derive(){}15 void fun(){cout<<"derive.fun";}16 };17 18 int main()19 {20 base *b=new derive();21 b->fun();22 }
基类中的fun()函数是虚函数或者非虚函数导致了输出结果的不同:
我们知道,继承类的函数列表中先是基类的函数,然后紧接着是继承类的函数,如基类的fun函数是虚有的,那么继承类的fun函数是对基类函数的重写,因此需要覆盖,此时继承类中的函数表中仅有derive::fun,因此b->fun()输出的是derive.fun;如果基类的fun函数不是虚有的,那么继承类中的函数列表中有base::fun和derive::fun两个函数,因此b->fun()输出的是base.fun。