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) 编辑 收藏 举报