#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
转载请注明原文地址:https://blackberry.8miu.com/read-17793.html