C++虚函数与多态记录
代码
#include "pch.h"
#include <iostream>
using namespace std;
class A
{
int n;
public:
virtual void show() { cout << "A show" << endl; }
virtual void show2() { cout << "A show2" << endl; }
};
class B :public A
{
public:
void show() { cout << "B show" << endl; }
};
typedef void(*pFUNC)();
class C :public A
{
public:
void show() { cout << "C show" << endl; }
};
int main()
{
int num = 100;
int *po = #
cout << "Hello============== World!\n";
A a;
B b;
C c;
int* pvfptr;
pvfptr = (int*)&b;
cout << "&b: " << &b << endl;
cout << "pvfptr: " << pvfptr << endl;
int* _vfptr;
_vfptr = (int*)*pvfptr;
cout << "*pvfptr: " << *pvfptr << endl;
cout << "(int*)*pvfptr: " << (int*)*pvfptr << endl;
cout << "_vfptr: " << _vfptr << endl;
int* pfunc1 = (int*)*_vfptr;
cout << "pfunc1: " << pfunc1 << endl;
int* pfunc2 = (int*)*(_vfptr + 1);
cout << "pfunc2: " << pfunc2 << endl;
pFUNC pf1 = (pFUNC)pfunc1;
pf1();
pFUNC pf2 = (pFUNC)pfunc2;
pf2();
pFUNC pf3 = (pFUNC)_vfptr;
pf3();
pFUNC pf4 = (pFUNC)_vfptr;
pf4();
return 0;
}
VS 内存地址
代码对应的图示