Polymorphic abstract base class with operator== or equivalen= t functionality; design considerations
{ QP encoding detected and decoded. Check your settings. -mod }
Here is the scenario:
I am attempting to design a polymorphic abstract base class (i.e. an
interface), which will be extended, and its pure virtual functions
implemented, by a set of concrete classes.
I want all the concrete classes to support equality testing, so I
thought of adding a pure virtual 'operator==' method to the abstract
base class which will be implemented by any concrete class
implementing the interface. But this approach poses some problems as
the signature of base class's 'operator==' method and derived class's
'operator==' method do not match.
E.g.
class IString
{
public:
virtual ~IString() {}
virtual unsigned int length() const = 0;
virtual bool operator==(const IString&) = 0;
virtual bool operator!=(const IString&) = 0;
};
class CString : public IString
{
public:
CString :
strLen(0),
str(0)
{}
~CString() {}
virtual unsigned int length() const
{ return strLen; }
virtual bool operator==(const CString&)
{ return true; } // dummy implementation
virtual bool operator!=(const CString&)
{ return true; } // dummy implementation
private:
unsigned int strLen;
char* str;
};
int main()
{
CString S;
return 0;
}
On compiling the above code with gcc 4.5.0, I get the following
(expected) error:
error: cannot declare variable =91S' to be of abstract type =91CString'
because the following virtual functions are pure within =91CString':
virtual bool IString::operator==(const IString&)
virtual bool IString::operator!=(const IString&)
Pardon my na=EFvet=E9, but is what I am try to achieve, sane? Is there
another way to achieve what I am attempting?
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]