class A
{
public:
virtual ~A() {}
virtual void funcA1() = 0;
virtual void funcA2() = 0;
};
class B
{
public:
virtual ~B() {}
virtual void funcB1() = 0;
virtual void funcB2() = 0;
virtual void funcB3() = 0;
};
class C
{
public:
virtual ~C() {}
virtual void funcC1() = 0;
virtual void funcC2() = 0;
virtual void funcC3() = 0;
};
class ISuper
{
public:
virtual ~ISuper() {}
virtual A * interfaceA() = 0;
virtual B * interfaceB() = 0;
virtual C * interfaceC() = 0;
};
class FirstSuper
: public ISuper
, public A
, public B
{
public:
virtual ~FirstSuper() {}
virtual A * interfaceA()
{
return this;
}
virtual B * interfaceB()
{
return this;
}
virtual C * interfaceC()
{
return 0;
}
virtual void funcA1() {}
virtual void funcA2() {}
virtual void funcB1() {}
virtual void funcB2() {}
virtual void funcB3() {}
};
int main(int argc, char * argv[])
{
ISuper * super = new FirstSuper;
super->interfaceA()->funcA1();
super->interfaceA()->funcA2();
super->interfaceB()->funcB1();
super->interfaceB()->funcB2();
super->interfaceB()->funcB3();
}