虚函数 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

posted @ 2012-10-27 19:09  justplus  阅读(200)  评论(0编辑  收藏  举报