Virtual Method

如果一个成员函数函数不声明为virtual的,那么它将根据指针或者引用的类型来调用,否则,它将根据指针或者引用所指的对象类型来调用。

我们可以做一下对比:


现在去掉virtual试试。

现在子类中保留virtual,父类不保留试试。

由此可见这不能实现多态,而且我还发现我的程序不能正常退出,必须强制退出。

现在父类保留virtual,子类不保留,再试试。

所以由此可见,只要是指针或者引用类型中函数是virtual的就可以实现多态了。

事实上只要父类的函数是virtual的,子类中的这个函数也就自动是virtual的,所以最后一种情况和第一种情况是等效的,不过为了提醒程序员,一般的写法就是都加上virtual关键字修饰。

父类的析构函数也要声明成virtual的不仅仅是出于防止资源泄露的考虑,而且是因为这可以实现对象在销毁时调用正确的析构函数和调用析构函数的顺序来析构子类对象的父子成分,因为析构函数也遵循多态机制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容