















































































// B* ptrBTemp = new B();
// InvokeFunc(ptrBTemp);






代码中ptrA, ptrB, ptrC都是指向A的指针,但在调用func()函数时,却是分别调用的A, B, C类的方法。
InvokeFunc(A* _ptr)向调用者展现的都是统一的接口:接受指向A类型的参数作为指针。但是如果声明B* ptrB=new B(), C* ptrC=new C()。同样是可以传递给这个方法作为参数的,也可以实现调用各自的Func方法。
那么使用A* ptrA = new B()和使用B* ptrB = new B()除了前者只能调用A的成员方法和B中所重写的A中的虚方法,后者既能调用A中的方法也能调用B中的方法这样的区别外,还有什么样的区别呢?
在开发中能带给我们其他什么实际的好处呢?
Answer:
这种用法可以带来运行期决策。
比如,可以有个基类数组,或链表
A* as[10];
因为有些A*其实是B*,所以调用时可以用B的虚函数。
这种用法只有在A有虚函数的情况下才有用。本来多态的关键也就是虚函数。