如果一个函数被定义为虚拟并且与纯虚拟相同,这到底意味着什么?
来自维基百科的虚函数 …
在面向对象的编程中,在 C++ 和 Object Pascal 等语言中,虚函数或虚方法是一种可继承和可覆盖的函数或方法,可促进动态调度。这个概念是面向对象编程 (OOP) 的(运行时)多态性部分的重要组成部分。简而言之,虚函数定义了要执行的目标函数,但在编译时可能不知道目标函数。
与非虚函数不同,当虚函数被覆盖时,派生最多的版本将用于类层次结构的所有级别,而不仅仅是创建它的级别。因此,如果基类的一个方法 调用 虚方法,则将使用派生类中定义的版本,而不是基类中定义的版本。
这与非虚函数形成对比,非虚函数仍然可以在派生类中被覆盖,但“新”版本只会被派生类及其以下使用,而根本不会改变基类的功能。
然而..
纯虚函数或纯虚方法是如果派生类不是抽象的,则需要由派生类实现的虚函数。
当纯虚方法存在时,类是“抽象的”,不能单独实例化。相反,必须使用实现纯虚拟方法的派生类。纯虚拟根本没有在基类中定义,所以派生类 必须 定义它,或者派生类也是抽象的,不能被实例化。只有没有抽象方法的类才能被实例化。
虚拟提供了一种覆盖基类功能的方法,而纯虚拟 需要 它。