[C++]一个面试官问了无数次的问题--什么是“多态”

Posted drunknbeard

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++]一个面试官问了无数次的问题--什么是“多态”相关的知识,希望对你有一定的参考价值。

C++ Prime 里有原话(中文):这种“用基类的指针或引用操纵多个类型”的能力被称为多态(polymorphism)。

例如有基类Camera, 他的子类有各种Camera,然后已知函数:

void lookat(const Camera *pcamera);

在实现lookat()时,只要对基类Camera的接口进行编程,而与 指针 pcamera 指向的具体是哪一个类无关(Camera有很多子类)。
每个单独的lookat()调用都会被传入一个Camera子类对象地址。编译器会自动地把他们转换成适当的基类指针。在运行时需要解析出被调用的函数,这个解析过程被称为动态绑定(dynamic binding),在默认情况下,函数在编译时时静态解析的。在C++中,通过一种被称为虚拟函数(virtual function)的机制来支持动态绑定。通过继承和动态绑定,子类型多态性未面向对象的程序设计提供了基础。

这样的好处是,这个函数的实现和子类无关,不管增加或者减少子类,它都在那里,在一开始写类和函数的时候,不用考虑将来需要维护的新类型。当然也有人可能说每次增加子类都要向这个方法兼容。这个问题在于,你不用就不用,用才要去匹配它的标准,当然有时候往回查找确实是比较烦,但是这中标准保证了不容易乱套,同一种方法,这也写一点那也写一点,多了更乱。

以上是关于[C++]一个面试官问了无数次的问题--什么是“多态”的主要内容,如果未能解决你的问题,请参考以下文章

华为Android三面成功通过,面试官都问了什么?

三张图带你弄懂stl内存分配器,再也不怕面试官问了

三张图带你弄懂stl内存分配器,再也不怕面试官问了

面经面试官问我:数据库中事务的隔离级别有哪些?各自有什么特点?然而。。。

鹅厂面试官问了句.NET性能调优,求职者的回复亮瞎全场...

.NET中同步异步多线程究竟是什么关系?