如果我咨询维基百科,我看到虚函数的定义是:
“In object-oriented programming,a virtual function or virtual method is a function or method whose behavIoUr can be overridden within an inheriting class by a function with the same signature”
这个定义看似简单而优雅,而不是C特定的.但对我而言,它似乎并没有在C中捕获虚函数的概念,因为当然,非虚函数也可以通过具有相同签名的函数在继承类中被覆盖.
如果我被要求描述虚拟函数是非正式的,我会说一些关于“它是一种方法的指针,当你通过基类指针调用它时,调用派生类中定义的它的版本,如果指针实际指向派生类的实例“.这似乎不是一个非常优雅的概念描述.我知道人们说这就是在C中实现“多态”的方式(多态性,据我所知,大致是将对象组织成层次结构的整体想法),但我不知道有更好的方式来理解或解释机制比通过指针经过示例.
我想我对于虚函数的“指针”描述是否是他们定义的基础,或者只是它们在C中实现的附带事件感到困惑.
解决方法
A virtual function is a way of defining a family of related behaviors that can be customized by the entities that actual have to do those behaviors.
如果忽略虚函数的所有C-主义 – 如何让虚函数使dynamic_cast能够为类类型的对象工作,如何通过指针访问它们只是虚拟处理,虚拟析构函数如何与虚拟非完全不同析构函数等 – 我认为上述陈述是虚拟函数的核心所在.
我喜欢这个陈述的主要原因是它以一种将它们与编程分离的方式描述虚函数.您可以通过给出一些具体的类比,使用此定义向非技术人员解释虚函数.例如,“打开灯”的想法可以被认为是一个虚拟功能,因为当你打开灯时发生的事情的实际机制完全取决于你正在使用的特定光(白炽灯?荧光灯?LED? ),但每种情况下的概念都是一样的.当然,这不是一个完美的类比,但我认为它足够好.
更一般地说,恕我直言,如果你被要求非正式地描述一些东西,尽可能地尝试远离你正在使用的特定编程语言,如果可能的话,尽可能远离计算机.尝试考虑概念适用的最一般设置,然后在该级别描述它.然后,我再教授入门CS课程,所以我对这个领域有一点偏见,所以我不知道这在面试工作中有多适用. 原文链接:https://www.f2er.com/c/110333.html