描述C中虚拟函数的最简洁但最准确的方法是什么?
被要求描述虚拟功能是什么似乎是评估基本C知识的访谈中最常见的问题之一.然而,经过几年编程C,我仍然有一种不舒服的感觉,我真的不明白如何最好地定义它们是什么.
如果我咨询维基百科,我看到虚函数的定义是:
这个定义看似简单而优雅,而不是C特定的.但对我而言,它似乎并没有在C中捕获虚函数的概念,因为当然,非虚函数也可以通过具有相同签名的函数在继承类中被覆盖. 如果我被要求描述虚拟函数是非正式的,我会说一些关于“它是一种方法的指针,当你通过基类指针调用它时,调用派生类中定义的它的版本,如果指针实际指向派生类的实例“.这似乎不是一个非常优雅的概念描述.我知道人们说这就是在C中实现“多态”的方式(多态性,据我所知,大致是将对象组织成层次结构的整体想法),但我不知道有更好的方式来理解或解释机制比通过指针经过示例. 我想我对于虚函数的“指针”描述是否是他们定义的基础,或者只是它们在C中实现的附带事件感到困惑. 解决方法
我一直认为这句话抓住了虚函数的本质:
如果忽略虚函数的所有C-主义 – 如何让虚函数使dynamic_cast能够为类类型的对象工作,如何通过指针访问它们只是虚拟处理,虚拟析构函数如何与虚拟非完全不同析构函数等 – 我认为上述陈述是虚拟函数的核心所在. 我喜欢这个陈述的主要原因是它以一种将它们与编程分离的方式描述虚函数.您可以通过给出一些具体的类比,使用此定义向非技术人员解释虚函数.例如,“打开灯”的想法可以被认为是一个虚拟功能,因为当你打开灯时发生的事情的实际机制完全取决于你正在使用的特定光(白炽灯?荧光灯?LED? ),但每种情况下的概念都是一样的.当然,这不是一个完美的类比,但我认为它足够好. 更一般地说,恕我直言,如果你被要求非正式地描述一些东西,尽可能地尝试远离你正在使用的特定编程语言,如果可能的话,尽可能远离计算机.尝试考虑概念适用的最一般设置,然后在该级别描述它.然后,我再教授入门CS课程,所以我对这个领域有一点偏见,所以我不知道这在面试工作中有多适用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |