#ifndef COUNT #define COUNT 1 #endif class Base { public: int iBaseMember[COUNT]; virtual ~Base(); }; class MInterface { public: virtual int foo(); }; class Derived : public Base, public MInterface { public: virtual int foo(); int iDerived; }; class MoreDerived : public Derived { public: virtual int foo(); int iMoreDerived; }; int Derived::foo() { return iDerived; } Derived* fun1() { return new Derived; } MInterface* fun2() { return new Derived; } int MoreDerived::foo() { return iMoreDerived; } MoreDerived* fun3() { return new MoreDerived; } MInterface* fun4() { return new MoreDerived; }