P
psane
I have the following code
#include <iostream>
#include <string>
using namespace std;
class superclass
{
public:
superclass () {}
virtual bool operator== (const superclass& rhs) const;
virtual void doit (const superclass* rhs) const;
virtual string Id () const { return "superclass";}
};
void
superclass::doit (const superclass* rhs) const
{
cout << "this->Id = " << Id () << endl;
cout << "rhs->Id = " << rhs->Id () << endl;
*this == *rhs;
}
bool
superclass:perator== (const superclass& rhs) const
{
cout << "in superclass operator==" << endl;
return true;
}
///////////////////////////////////////////////////////////////////////////
class subclass : public superclass
{
public:
subclass () : superclass () {}
virtual bool operator== (const subclass& rhs) const;
#if 0
virtual bool operator== (const superclass& rhs) const;
#endif
virtual string Id () const { return "subclass";}
};
#if 0
bool
subclass:perator== (const superclass& rhs) const
{
cout << "in subclass 2 operator==" << endl;
return true;
}
#endif
bool
subclass:perator== (const subclass& rhs) const
{
cout << "in subclass operator==" << endl;
return true;
}
int
main (int argc, char* argv[])
{
subclass x;
subclass y;
x.doit (&y);
return 0;
}
The output I get is
this->Id = subclass
rhs->Id = subclass
in superclass operator==
However, if I change #if 0s to #if 1, I get correct (expected) output.
this->Id = subclass
rhs->Id = subclass
in subclass 2 operator==
It looks like the dynamic datatype of RHS is not being determined
correctly for operator==. Why is this so ?? How do I fix this ?? (I
really need to call doit () in the superclass ...
#include <iostream>
#include <string>
using namespace std;
class superclass
{
public:
superclass () {}
virtual bool operator== (const superclass& rhs) const;
virtual void doit (const superclass* rhs) const;
virtual string Id () const { return "superclass";}
};
void
superclass::doit (const superclass* rhs) const
{
cout << "this->Id = " << Id () << endl;
cout << "rhs->Id = " << rhs->Id () << endl;
*this == *rhs;
}
bool
superclass:perator== (const superclass& rhs) const
{
cout << "in superclass operator==" << endl;
return true;
}
///////////////////////////////////////////////////////////////////////////
class subclass : public superclass
{
public:
subclass () : superclass () {}
virtual bool operator== (const subclass& rhs) const;
#if 0
virtual bool operator== (const superclass& rhs) const;
#endif
virtual string Id () const { return "subclass";}
};
#if 0
bool
subclass:perator== (const superclass& rhs) const
{
cout << "in subclass 2 operator==" << endl;
return true;
}
#endif
bool
subclass:perator== (const subclass& rhs) const
{
cout << "in subclass operator==" << endl;
return true;
}
int
main (int argc, char* argv[])
{
subclass x;
subclass y;
x.doit (&y);
return 0;
}
The output I get is
this->Id = subclass
rhs->Id = subclass
in superclass operator==
However, if I change #if 0s to #if 1, I get correct (expected) output.
this->Id = subclass
rhs->Id = subclass
in subclass 2 operator==
It looks like the dynamic datatype of RHS is not being determined
correctly for operator==. Why is this so ?? How do I fix this ?? (I
really need to call doit () in the superclass ...