Wonder奇迹奇迹

导航

C++虚函数的陷阱

首先看一段代码:

 1 class B   
 2 {    
 3 public:   
 4     virtual void fun(int i = 1)      
 5     {     
 6         std::cout << "base fun called, " << i;     
 7     };    
 8 };  
 9 
10 class D : public B    
11 {    
12 private:    
13     virtual void fun(int i = 2)      
14     {     
15         std::cout << "driver fun called, " << i;     
16     };    
17 }; 

如果进行如下操作:

B* p = new D();    
p->fun();    
会输出 driver fun called, 1

这里出现了两个问题:

(1)子类的虚函数即使被声明为私有函数,仍然被外部调用了。

(2)虚函数虽然是动态绑定的,但缺省的参数值确是静态绑定的。

这两点一定要注意啊!!

posted on 2015-09-24 11:20  Wonder奇迹奇迹  阅读(175)  评论(0编辑  收藏  举报