最近我参加了一次采访。采访者和我正在谈论c ++中的虚函数。我解释了虚拟函数的所有概念以及如何使用vtable
和vptr
来工作。他同意我的解释。在关于虚函数的对话结束时,他问我一个问题,为什么我们要使用基类指针来调用派生类函数?
例如
Shape
是base class
。 Circle
和Square
是derived classes
从基类'Shape
'继承而来的。定义的方法area()
是虚函数。
Shape *basePtr = new Circle();
baseptr->area();
他问我为什么在这里使用基指针来调用派生类函数?为什么不创建派生类对象,并通过该对象调用派生类方法呢?
我告诉他,我们可以创建一个处理程序函数,因为该函数的参数始终为base class pointer
。这样我们可以简单地将派生类对象调用handler function
以便使用Generic实现。
此外,我们可以将派生类对象存储到基类指针的向量中,并且可以通过迭代向量来访问派生类方法。这样,我们可以建立一个顺序执行任务的命令。
但是他只是微笑着摇了摇头。我为什么在这里发布此问题,确切的答案是什么?或我的答案足以解释问题?