sno*_*nok 6 c++ oop polymorphism virtual function
被要求描述虚拟功能是什么似乎是评估基本C++知识的访谈中最常见的问题之一.然而,经过几年的C++编程,我仍然有一种不舒服的感觉,我真的不明白如何最好地定义它们是什么.
如果我咨询维基百科,我看到虚函数的定义是:
"在面向对象的编程中,虚函数或虚方法是一种函数或方法,其行为可以通过具有相同签名的函数在继承类中重写"
这个定义看起来简单而优雅,而不是C++特有的.但对我而言,似乎并没有捕获C++中虚函数的概念,因为非虚函数也可以通过具有相同签名的函数在继承类中被覆盖.
如果我被要求描述虚拟函数是非正式的,我会说一些关于"它是一种方法的指针,当你通过基类指针调用它时,调用派生类中定义的它的版本,如果指针实际指向派生类的实例".这似乎不是一个非常优雅的概念描述.我知道,有人说这是多么"多态性"是用C实现++(多态性,据我了解,大概是组织对象为分层结构的整体思路),但我不知道一个华丽的方式来理解或解释机制比通过指针经过示例.
我想我对于虚函数的"指针"描述是否是他们定义的基础,或者只是它们在C++中实现的附带事件感到困惑.
我一直认为这句话抓住了虚函数的本质:
虚函数是一种定义一系列相关行为的方法,这些行为可由实际必须执行这些行为的实体定制.
如果忽略所有的C++ -虚函数主义-如何有虚函数能够dynamic_cast为类类型,它们是如何只处理虚拟对象的工作,如果通过指针访问,如何虚析构函数是从虚拟非析构函数完全不同等等 - 我认为上述陈述是虚拟功能的核心所在.
我喜欢这个陈述的主要原因是它以一种将它们与编程分离的方式描述虚函数.您可以通过给出一些具体的类比,使用此定义向非技术人员解释虚函数.例如,"打开灯"的想法可以被认为是一个虚拟功能,因为当你打开灯时发生的事情的实际机制完全取决于你正在使用的特定光(白炽灯?荧光灯?LED? ),但每种情况下的概念都是一样的.当然,这不是一个完美的类比,但我认为它足够好.
更一般地说,恕我直言,如果你被要求非正式地描述一些东西,尽可能地尝试远离你正在使用的特定编程语言,如果可能的话,尽可能远离计算机.尝试考虑概念适用的最一般设置,然后在该级别描述它.然后,我再教授入门CS课程,所以我对这个领域有一点偏见,所以我不知道这在面试工作中有多适用.:-)