64,654
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base1 {
public:
int ibase1;
Base1() :ibase1(10) {}
virtual void f() { cout << "Base1::f()" << endl; }
virtual void g() { cout << "Base1::g()" << endl; }
virtual void h() { cout << "Base1::h()" << endl; }
};
class Base2 {
public:
int ibase2;
Base2() :ibase2(20) {}
virtual void f() { cout << "Base2::f()" << endl; }
virtual void g() { cout << "Base2::g()" << endl; }
virtual void h() { cout << "Base2::h()" << endl; }
virtual void mumble() { cout << "Base2::mumble()" << endl; }
};
class Derive : public Base1, public Base2
{
public:
int iderive;
Derive() :iderive(100) {}
virtual void f() { cout << "Derive::f()" << endl; }
virtual void g1() { cout << "Derive::g1()" << endl; }
virtual void mumble() { cout << "Derive::mumble()" << endl; }
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef void(*Fun)(void);
Fun pFun = NULL;
Derive d;
int** pVtab = (int**) &d;
cout << "[0] Base1::_vptr->" << endl;
pFun = (Fun) pVtab[0][0];
cout << " [0] ";
pFun();
pFun = (Fun) pVtab[0][1];
cout << " [1] ";
pFun();
pFun = (Fun) pVtab[0][2];
cout << " [2] ";
pFun();
pFun = (Fun) pVtab[0][3];
cout << " [3] ";
pFun();
pFun = (Fun) pVtab[0][4];
cout << " [4] ";
// pFun();
//
// pFun = (Fun) pVtab[0][5];
// cout << " [5] ";
cout << pFun << endl;
cout << "[1] Base1.ibase1 = " << (int) pVtab[1] << endl;
int s = sizeof(Base1) / 4;
cout << "[" << s << "] Base2::_vptr->" << endl;
pFun = (Fun) pVtab[s][0];
cout << " [0] ";
pFun();
pFun = (Fun) pVtab[s][1];
cout << " [1] ";
pFun();
pFun = (Fun) pVtab[s][2];
cout << " [2] ";
pFun();
pFun = (Fun) pVtab[s][3];
cout << " [3] ";
pFun();
pFun = (Fun) pVtab[s][4];
cout << " [4] ";
cout << pFun << endl;
cout << "[" << ++s << "] Base2.ibase2 = " << (int) pVtab[s] << endl;
cout << "[" << ++s << "] Base2.ibase2 = " << (int) pVtab[s] << endl;
return 0;
}
int main()
{
typedef void(*Fun)(void);
Fun pFun = NULL;
Derive d;
int** pVtab = (int**) &d;
cout << "[0] Base1::_vptr->" << endl;
pFun = (Fun) pVtab[0][0];
cout << " [0] ";
pFun();
pFun = (Fun) pVtab[0][1];
cout << " [1] ";
pFun();
pFun = (Fun) pVtab[0][2];
cout << " [2] ";
pFun();
pFun = (Fun) pVtab[0][3];
cout << " [3] ";
pFun();
cout << "[1] Base2::_vptr->" << endl;
pFun = (Fun) pVtab[1][0];
cout << " [0] ";
pFun();
pFun = (Fun) pVtab[1][1];
cout << " [1] ";
pFun();
pFun = (Fun) pVtab[1][2];
cout << " [2] ";
pFun();
pFun = (Fun) pVtab[1][3];
cout << " [3] ";
pFun();
return 0;
}
也可以测一下 pVtab[0][4] 看看Base1的虚函数表里是不是有第5个函数。。。