P
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?
Thanks,
Pete
// 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 MethodsA,
public MethodsB
{
};
// A suggested implementation of a first low level interface
// Can be used as a mixin to easily create concrete objects
class ImplOfAMixin : public MethodsA
{
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 MethodsB
{
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;
return 0;
}
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?
Thanks,
Pete
// 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 MethodsA,
public MethodsB
{
};
// A suggested implementation of a first low level interface
// Can be used as a mixin to easily create concrete objects
class ImplOfAMixin : public MethodsA
{
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 MethodsB
{
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;
return 0;
}