虚函数 or 非虚函数
1 #include<iostream> 2 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 base 12 { 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。