#include<iostream>
using namespace std;
class A{
public:
int i;
virtual void test(){
cout << i <<endl;
};
};
class B{
public:
int i;
virtual void test(){
cout << i <<endl;
};
};
class C:public A,public B{
public:
int i;
void test(){
cout << i <<endl;
};
};
C c;
typedef void (*FUN)(int i);
int main(){
C *s = &c;
A *a = &c;
B *b = &c;
s->i = 11;
a->i = 22;
b->i = 33;
FUN fun;
cout << "s:" << s << endl;
cout << "a:" << a << endl;
cout << "b:" << b << endl;
cout << endl;
cout << *(int *)s << endl;
cout << *((int *)s+1) << endl;
cout << *((int *)s+2) << endl;
cout << *((int *)s+3) << endl;
cout << *((int *)s+4) << endl;
cout << *((int *)s+5) << endl;
cout << endl;
cout << *((*((int **)s+0))+0) <<endl;
cout << *((*((int **)s+0))+1) <<endl;
cout << *((*((int **)s+0))+2) <<endl;
cout << *((*((int **)s+0))+3) <<endl;
cout << endl;
cout << *((*((int **)s+2))+0) <<endl;
cout << *((*((int **)s+2))+1) <<endl;
cout << *((*((int **)s+2))+2) <<endl;
cout << *((*((int **)s+2))+3) <<endl;
fun = (FUN)*((*((int **)s+0))+0);
fun((int)a);
fun = (FUN)*((*((int **)s+2))+0);
fun((int)b);
return 1;
}