这篇小文来聊聊 C++中的关键字 override,它的含义其实两句话就说完了,但为了叙述的完整性,让我们从虚函数说起。感兴趣的小伙伴可以跟着小编一起学习下面文章内容
在C++中,虚函数是最常见的实现多态的机制之一,来个最简单的例子温习一下:
以上是一个基类 Base
及其派生子类的最简示例,基类中有一个普通虚函数 f( ),并且派生类们都复写(即override
)了该虚函数。
以上代码的含义再清楚不过:我们希望通过基类指针或者基类引用,可以调用派生类版本的函数 f( ),以此实现所谓的多态,如下代码所示:
但,作为一名普通虚函数 f( ),它实际上并不要求我们一定要复写(即override
)它,假如你在派生类中不复写它,那么派生类将很自然地使用基类所提供的备用版本。
危险就在于此,人类是一个有诸多毛病的物种,其中一个根深蒂固的毛病是自以为是和粗心大意,因此以下代码很有可能出自某个同胞之手:
很明显,这位同胞的本意与以上两个派生类相同:派生出Derived3,并复写虚函数 f( )。很可惜,如果此时这位同胞贸然执行如下代码,将带来灾难性的后果:
如果这不够灾难,可以将函数 f( ) 想象成民航飞机的起飞引导程序。
现在问题很明显了:
派生类的虚函数的复写,很有可能出现乌龙——人类自以为复写了基类的虚函数(比如 void f( ))
,但实际上却写了另一个函数(比如 void f(int))
,要命的是C++
语法并不制止这种愚蠢的行为,它会以为这是我们出于某种神秘的原因才这么干的。
然后,执行程序,就这。。
解决办法:
消除人类与编译器之间深刻的误会,即:我们在想复写虚函数的时候,也同时将此想法明明白白地告诉编译器,别让它有什么误会。怎么告诉它呢?蹬蹬噔噔憋了半天主角终于出场鸟:
到此这篇关于C++中关键字 override
的简析的文章就介绍到这了,更多相关C++中关键字 override
内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!