All pastes #676097 Raw Edit

Anonymous

public text v1 · immutable
#676097 ·published 2007-08-30 19:45 UTC
rendered paste body
class 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();
}