多态与虚函数

多态与虚函数

注意

  1. 在成员函数(静态成员、构造函数和析构函数除外)中调用同类的虚函数的语句是多态的。

  2. 在构造函数和析构函数中调用虚函数不是多态的,编译时即可以确定调用的是哪个函数。

  3. 编译器看到是哪个类的指针,那么就会认为通过它访问的,就应该是哪个类的成员,编译器不会分析基类指针到底指向的是基类对象还是派生类对象。

  4. 区分多态和非多态的情况:

    1. 通过基类指针或引用调用成员函数的语句,只有当该成员函数是虚函数时才会是多态。如果该成员函数不是虚函数,那么这条函数调用语句就是静态联编的,编译时就能确定调用的是那个类的成员函数。
    2. 另外,C++语言规定,只要在基类中某个函数被声明为虚函数,那么,在派生类中,同名同参数表的成员函数即使前面不写 virtual 关键字,也自动成为虚函数.

总结

  1. 通过基类的指针,调用基类和派生类中都有的同名虚函数时,基类指针指向的是基类对象,执行的就是基类的虚函数,基类指针如果指向派生类对象,执行的就是派生类的虚函数,这就称为多态。多态也适用于通过基类引用调用基类和派生类中都有的同名虚函数的情况。

  2. 多态是通过虚函数表来实现的。

  3. 在普通成员数中调用虚函数是多态的,但在构造函数和析构函数中调用虚函数不是多态的。

  4. 有虚函数的类,其析构函数也应该实现为虚函数

  5. 包含纯虚函数的类称为抽象类。不能用抽象类定义对象。抽象类的派生类,仅当实现了所有的纯虚函数,才会变成非抽象类。

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

相关阅读更多精彩内容

  • 什么是接口? 接口是行为的抽象,接口的目的主要为不同的类提供通用的处理服务,从而实现系统的可维护性与可扩展性。 虚...
    wuzhiguo阅读 501评论 0 0
  • 多态(1)静态多态与动态多态 什么是多态 从字面上理解就是多种形态的意思。而多态一词最初源自希腊语,其含义便是“多...
    kingZXY2009阅读 2,407评论 0 2
  • C++虚函数 C++虚函数是多态性实现的重要方式,当某个虚函数通过指针或者引用调用时,编译器产生的代码直到运行时才...
    小白将阅读 1,791评论 4 19
  • 一生太长,要和有趣的人在一起,而有趣的最基本前提,就是谈得来。爱情大多萌发于“谈得来”,从一句你好,到你爱看...
    狗子哥哥阅读 660评论 0 2
  • 则鱼阅读 125评论 0 0

友情链接更多精彩内容