#include <iostream>
using namespace std;
class A {
public:
A(){}
virtual void geta(){
cout << "A:A" <<endl;
}
virtual void getb(){
cout << "A:B" <<endl;
}
};
class B :public A{
public:
B(){}
virtual void getc(){
cout << "B:C" <<endl;
}
virtual void getd(){
cout << "B:D" <<endl;
}
virtual void getE(){
cout << "B:E" <<endl;
}
};
typedef void (*Fun)( void);
int main (){
A a; //
B b;
Fun pFun;
for( int i =0;i<5; i++){
pFun = (Fun )*((int *) *(int *)(&b)/* *(int *)(&b)已经转化为了构造函数 */ +i ); // 必须取的是虚函数列表 ;;
pFun = (Fun )*((int *) *(int *)(&a) + i); //
pFun();
}
return 0; //
}
#include<iostream>
using namespace std;
class A
{
public:
virtual void fun1()
{
cout << "A::fun1()" << endl;
}
virtual void fun2()
{
cout << "A::fun2()" << endl;
}
};
class B : public A
{
public:
void fun1()
{
cout << "B::fun1()" << endl;
}
void fun2()
{
cout << "B::fun2()" << endl;
}
};
int main()
{
A *pa = new B;
pa->fun1();
delete pa;
system("pause");
return 0;
}
class A
{
private:
int a;
int b;
public:
virtual void fun0()
{
cout<<"A::fun0"<<endl;
}
};

class base
{
private:
int a;
public:
void bfun()
{
}
virtual void vfun1()
{
}
virtual void vfun2()
{
}
};
class derived : public base
{
private:
int b;
public:
void dfun()
{
}
virtual void vfun1()
{
}
virtual void vfun3()
{
}
};
class A
{
};
class B
{
char ch;
virtual void func0() { }
};
class C
{
char ch1;
char ch2;
virtual void func() { }
virtual void func1() { }
};
class D: public A, public C
{
int d;
virtual void func() { }
virtual void func1() { }
};
class E: public B, public C
{
int e;
virtual void func0() { }
virtual void func1() { }
};
int main(void)
{
cout<<"A="<<sizeof(A)<<endl; //result=1
cout<<"B="<<sizeof(B)<<endl; //result=8
cout<<"C="<<sizeof(C)<<endl; //result=8
cout<<"D="<<sizeof(D)<<endl; //result=12
cout<<"E="<<sizeof(E)<<endl; //result=20
return 0;
}
class CommonBase
{
int co;
};
class Base1: virtual public CommonBase
{
public:
virtual void print1() { }
virtual void print2() { }
private:
int b1;
};
class Base2: virtual public CommonBase
{
public:
virtual void dump1() { }
virtual void dump2() { }
private:
int b2;
};
class Derived: public Base1, public Base2
{
public:
void print2() { }
void dump2() { }
private:
int d;
};
class Derived size(32):
+---
| +--- (base class Base1)
| | {vfptr}
| | {vbptr}
| | b1
| +---
| +--- (base class Base2)
| | {vfptr}
| | {vbptr}
| | b2
| +---
| d
+---
+--- (virtual base CommonBase)
| co
+---
class A
{
public:
virtual void aa() { }
virtual void aa2() { }
private:
char ch[3];
};
class B: virtual public A
{
public:
virtual void bb() { }
virtual void bb2() { }
};
int main(void)
{
cout<<"A‘s size is "<<sizeof(A)<<endl;
cout<<"B‘s size is "<<sizeof(B)<<endl;
return 0;
}
#include<iostream>
using namespace std;
typedef void (*fVoid)();
class A
{
public:
static void test()
{
printf("hello A\n");
}
fVoid print;
A()
{
print = A::test;
}
};
class B : public A
{
public:
static void test()
{
printf("hello B\n");
}
B()
{
print = B::test;
}
};
int main(void)
{
A aa;
aa.print();
B b;
A* a = &b;
a->print();
return 0;
}
虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte
原文:http://www.cnblogs.com/vagabond/p/4996311.html