rendered paste bodyclass A
{
public:
char m_type;
A(char type = 0) : m_type(type) {}
};
class B : public A
{
public:
B() : A(1) {}
};
class C : public A
{
public:
C() : A(2) {}
};
class Base
{
public:
virtual void F1(A *p) = 0;
};
class Child : public Base
{
public:
void F1(A *p);
void F1A(A *p)
{
printf("Child A\n");
}
void F1B(B *p)
{
printf("Child B\n");
}
void F1C(C *p)
{
printf("Child C\n");
}
};
typedef (Child::*ChildMethod)(void *);
ChildMethod methods[] =
{
(ChildMethod)&Child::F1A,
(ChildMethod)&Child::F1B,
(ChildMethod)&Child::F1C
};
void Child::F1(A *p)
{
ChildMethod m = methods[p->m_type];
(this->*m)(p);
}
void main()
{
Child x;
A a;
B b;
C c;
x.F1(& c);
getch();
}