码迷,mamicode.com
首页 > 编程语言 > 详细

C++虚函数的陷阱

时间:2015-09-24 12:26:38      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

首先看一段代码:

 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)虚函数虽然是动态绑定的,但缺省的参数值确是静态绑定的。

这两点一定要注意啊!!

C++虚函数的陷阱

标签:

原文地址:http://www.cnblogs.com/WonderHow/p/4834725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!