All pastes #605980 Raw Edit

Untitled

public text v1 · immutable
·published 2007-07-06 16:06 UTC
rendered paste body
class ObjInterface1;
class ObjInterface2;
class ObjFullInterface;
class Obj2Interface1;
class Obj2Interface2;
class Obj2FullInterface;

class BaseObj
{

};

class Obj : public BaseObj
{
    public:
        ObjInterface1* GetInterface1() { return (ObjInterface1*)this; }
        ObjInterface2* GetInterface2() { return (ObjInterface2*)this; }
        ObjFullInterface* GetFullInterface() { return (ObjFullInterface*)this; } 
};

class ObjInterface1 : public BaseObj
{
    public:
        void I1_AFunc() {}
};

class ObjInterface2 : public BaseObj
{
    public:
        void I2_AFunc() {}
};

class ObjFullInterface : public ObjInterface1, public ObjInterface2
{

};

class BaseObj2 : public BaseObj
{

};

class Obj2 : public BaseObj2
{
    public:
        Obj2Interface1* GetInterface1() { return (Obj2Interface1*)this; }
        Obj2Interface2* GetInterface2() { return (Obj2Interface2*)this; }
        Obj2FullInterface* GetFullInterface() { return (Obj2FullInterface*)this; }
};

class Obj2Interface1 : public BaseObj2, public ObjInterface1
{
    public:
        void I1_BFunc() {}
};

class Obj2Interface2 : public BaseObj2, public ObjInterface2
{
    public:
        void I2_BFunc() {}
};

class Obj2FullInterface : public Obj2Interface1, public Obj2Interface2
{

};

void Test()
{
    Obj *obj = (Obj*)new ObjFullInterface;
    obj->GetInterface1()->I1_AFunc();
    Obj2 *obj2 = (Obj2*)new Obj2FullInterface;
    obj2->GetInterface1()->I1_BFunc();
}