美文网首页
C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

作者: dissolvache | 来源:发表于2020-05-30 00:30 被阅读0次

···

#include <stdlib.h>

#include <windows.h>

#include <stdio.h>

class A

{

public:

int x;

virtual void test()

{

printf("aaaa /n");

}

};

class B : public A

{

public:

int b;

void test()

{

printf("bbbb/n");

}

};

void Test(A& a)

{

a.test();

}

int main(int argc, char* argv[])

{

B b;

Test(b);

return 0;

}

···

存入虚表 虚表地址存储情况

lea eax,[ebp-och] 将对象b的首地址放入eax,push eax 将eax(b的首地址即b函数的虚表地址)放入ebp+8的位置。

函数情况 函数堆栈情况

进入函数压栈等操作后,ebp+8为b虚表地址,从虚表找到b的重写函数的地址放入edx,call调用【edx】

相关文章

  • C++学习笔记

    C++面对对象 实函数,虚函数,纯虚函数,函数重写 虚函数:需要进行子类的重写时。virtual void 函数名...

  • C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

    ··· #include #include #include class A { publ...

  • 2020-07-07-《C++虚函数》

    虚函数可以让子类重写函数 子类重写父类中的虚函数 重写与重载的区别?

  • C++第8天: 第127-第136课 虚函数

    继承及多态。 虚函数,会有一个vfptr以及vftable,当子类重写父类的方法时,虚函数指针会改变虚函数表里面的...

  • 2018-01-28 高级多态(一)

    纯虚函数 纯虚函数是必须在派生类中重写的虚函数。通过将虚函数初始化为0来将其声明为纯虚的。派生类重写所有虚函数,否...

  • 虚函数与纯虚函数的区别

    1.虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定...

  • 虚函数

    虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数...

  • C++11——面向对象编程

    虚函数的override说明符 派生类经常(但不总是)重写它们继承的虚函数。如果派生类没有重写其基类中的虚函数,那...

  • (转)虚函数和纯虚函数的作用与区别

    虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数...

  • 面向对象特征---多态

    1、重写 (1)概念:重写(也叫覆盖,Override)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现...

网友评论

      本文标题:C++:子类在重写虚函数时,堆栈中虚表,重写函数存储的情况

      本文链接:https://www.haomeiwen.com/subject/yzsqcxtx.html