zoukankan      html  css  js  c++  java
  • 关于多态性和虚函数的理解

    对于多态性的理解加深,编译器的类型转换,以及
    我们在讲fish类的对象fh的地址赋给pAN之时,c++编译器进行了类型转换,此时pAn保存的是animal对象的地址。当fn函数执行pAn->breath()时,调用的就是animal的对象的breath函数。
    <-this指针

    anima对象内存
    fish新增加的部分

    当构造fish类的对象时,先从animal 的构造函数去构造animal对象,然后调用fish类的构造函数完成自身部分的构造,从而拼接出一个完整的fish对象,当讲fish类的对象转换成animal 的类型时,该对象被认为是源对象整个内存模型的上半部分,即为animal的对象所占的内存。
    virtual关键字可以改变此种情况;
    当c++编译器在编译的时候,发现animal的类的breath()函数是虚函数,这个时候c++采用迟邦定技术,编译时并不确定其具体的调用函数,而在运行时,依据对象的类型(比如是传递的类对象的地址)来确认调用的是哪一个函数。这种能力就是c++的多态性。,如果没有在breath()函数前加virtual关键字时,c++编译器在编译时就确定了哪个函数被调用,这叫做早期绑定。
    c++的多态性用一句话概括:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象的类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。
    凡是含有纯虚函数的类叫做抽象类,这种类只是作为基类的派生类服务,在派生类中必须完全实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。

  • 相关阅读:
    小作业5
    小作业4
    Matplotlib基础
    Numpy学习笔记(下篇)
    Numpy学习笔记(上篇)
    机器学习的经典算法与应用
    opencv学习笔记D01
    Markdown新手入门
    python之生成器yeild
    pyinstaller打包.py程序为.exe操作指南
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3074735.html
Copyright © 2011-2022 走看看