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