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)虚函数虽然是动态绑定的,但缺省的参数值确是静态绑定的。
这两点一定要注意啊!!
评论0