Re: My attempt at a small hierarchy. Why doesn't my code compile?
 
* PeteUK:
See example code below. The instantiation of a Concrete object (see
main function) makes the compiler (VS 2003) complain that Concrete is
an abstract class because MethodsA::callA() and MethodsB::callB() are
not defined.
Hopefully it's obvious what I'm trying to acheive. Can someone tell me
where I'm going wrong?
C++ isn't Java.
To emulate Java's interfaces, inherit every interface class virtually.
Since there's then only one base class sub-object of each interface, any 
implementation of its member routines serves as implementation. :-)
<code>
#ifdef  _MSC_VER
#pragma warning( disable: 4250 )    // inherits via dominance
#endif
// Low level interface
struct MethodsA
{
     virtual ~MethodsA() {}
     virtual void callA() = 0;
};
// Another low level interface
struct MethodsB
{
     virtual ~MethodsB() {}
     virtual void callB() = 0;
};
// Higher level interface - the main base class of concrete objects
struct MainBase
     : public virtual MethodsA
     , public virtual MethodsB
{};
// A suggested implementation of a first low level interface
// Can be used as a mixin to easily create concrete objects
class ImplOfAMixin : public virtual MethodsA
{
public:
     void callA() {}
};
// A suggested implementation of a second low level interface
// Can be used as a mixin to easily create concrete objects
class ImplOfBMixin : public virtual MethodsB
{
public:
     void callB() {}
};
// Concrete class
class Concrete
     :    public MainBase,          // "isa" main base
          public ImplOfAMixin,      // pull in this mixin
          public ImplOfBMixin       // and this mixin
{
};
int main()
{
     Concrete obj;
}
</code>
Cheers & hth.,
- Alf