c++ 反汇编 虚函数
虚函数是面向对象程序设计的关键组成部分。对于具有虚函数的类而言,构造函数和析构函数的识别流程更加简单。而且,在类中定义了虚函数之后,如果没有提供默认的构造函数,编译器必须提供默认的构造函数。 对象的多态性需要通过虚表和虚表指针来完成,虚表指针被定义在对象首地址的前4字节处,因此虚函数必须作为成员函数使用。由于非成员函数没有this指针,因此无法获得虚表指针,进而无法获取虚表,也就无法访问虚函数。 class CVirtual { public: ~CVirtual() { printf("~CVirtual"); } CVirtual() { } CVirtual(int nNumber) { m_nNumber = nNumber; } virtual int GetNumber() { return m_nNumber; } virtual void SetNumber(int nNumber) { m_nNumber = nNumber; } private: int m_nNumber; }; 类中只定义一个int类型的数据成员,类大小却为8。当类中含有虚函数时,对象空间中第一项存放虚表指针。 35: // 获取含有虚函数表的类大小 36: int nSize = sizeof(CVirtual); 0007739D C7 45 EC 08 00 00 00 mov