Redefinition of Virtual Functions
If you make a subclass of an existing class and override a virtual function, make sure that the overriding function has exactly the same signature as the overridden function. This includes any const modifiers!
This problem arises particularly when creating new
RWCollectable classes. For example:
class MyObject : public RWCollectable {
public:
bool isEqual(); // No "const" !
};
The compiler will treat this definition of
isEqual() as completely independent of the
isEqual() in the base class
RWCollectable, because it is missing a
const modifier. Hence, if called through a pointer:
MyObject obj;
RWCollectable* c = &obj;
c->isEqual(); // RWCollectable::isEqual() will get called!