找到虚函数地址

    科技2022-08-28  96

    #include <iostream> using namespace std; class Base{ public: virtual void func(){cout<<"Base!"<<endl;} virtual void func2(){cout<<"Base!!"<<endl;} }; class Derived:public Base{ public: virtual void func(){cout<<"Derived!"<<endl;} }; //指针 void transferPoint(Base *b){b->func();} //引用 void transferRef(Base &b){b.func();} int main(){ Base *pBaseB = new Base(); Base *pBaseD = new Derived(); Base b; Derived d; Base &rBaseB = b; Base &rBaseD = d; transferPoint(pBaseB); transferPoint(pBaseD); transferRef(rBaseB); transferRef(rBaseD); cout<<"pBaseB地址为:"<<pBaseB<<endl; unsigned long *pAdd = nullptr; pAdd = reinterpret_cast<unsigned long *>(pBaseB); cout<<"pBaseB转换后的pAdd地址为:"<<pAdd<<endl; pAdd = (unsigned long*)(*pAdd); cout<<"Base的第一个虚函数指针:"<<(void *)pAdd[0]<<endl; cout<<"Base的第二个虚函数指针:"<<(void *)pAdd[1]<<endl; return 0; } ~

    out:

    Base! Derived! Base! Derived! pBaseB地址为:0x556b69065eb0 pBaseB转换后的pAdd地址为:0x556b69065eb0 Base的第一个虚函数指针:0x556b67217498 Base的第二个虚函数指针:0x556b672174d4
    Processed: 0.018, SQL: 9