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关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象的类型是派生类,就调用派生类的函数,如果对象类型是基类,就调用基类的函数。
    凡是含有纯虚函数的类叫做抽象类,这种类只是作为基类的派生类服务,在派生类中必须完全实现基类的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。
  • 相关阅读:
    第8/24周 覆盖索引 临界点
    理解统计信息(1/6):密度向量
    索引碎片检测
    索引碎片
    索引深入浅出(10/10):创建索引时,键列位置的重要性
    索引深入浅出(9/10):过滤索引
    索引深入浅出(8/10):覆盖索引或列包含
    索引深入浅出(7/10):非唯一列上的非聚集索引
    索引深入浅出(6/10):选择正确并合适的聚集索引键
    索引深入浅出(5/10):非聚集索引的B树结构在堆表
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/5303273.html
Copyright © 2011-2022 走看看