虚函数的机制解决了父类的指针如何调子类的函数的问题,因为这个时候子类的函数地址已经替换掉了父类同名函数的地址了。
那么如果有时候我子类就想调用重写前父类函数呢?前面已经做了替换了,好像没法回到过去了。
这个时候就需要用限定符的方式调用。父类::函数方法。这样系统就不会采取虚函数调用了,而是调用对应类下的特定那个函数。比如下文。
base_class *p = new dev_class;
p->v_func1(); // 虚函数机制下调用子类的函数:virtual call - calls `dev_class::v_func1`
p->base_class::v_func1(); //非虚函数机制,调用父类函数 non-virtual call - calls `base_class::v_func1`
参考的stackoverflow的答案,请见
http://stackoverflow.com/questions/11426970/why-can-a-derived-class-virtual-function-call-a-base-class-virtual-function-how
虚函数机制理解,请见:
http://www.cnblogs.com/chinazhangjie/archive/2012/07/11/2586535.html