Re: Run-time typing...
On Wed, 15 Aug 2007 22:10:01 -0400, "barcaroller"
<barcaroller@music.net> wrote:
I have an object ObjA of class ClassA. However, depending on the contents
of ObjA's data fields (which I do not know until the program runs), I would
like this object to be also of class ClassB. ClassB has member functions
which I need but which are relevant only if ObjA has specific contents in
its data fields.
Given that C++ is a statically-typed language, I don't know of a
straight-forward way of implementing this. Can it be done?
Example:
class ClassA {
int m_Number;
public:
int getNumber() const { return m_Number; }
virtual void neededMemberFunction() { }
};
class ClassB : public ClassA {
public:
virtual void neededMemberFunction()
{
// do the important stuff here
}
};
// A free function
void doStuffWithAObjects(std::vector<ClassA*>& v)
{
std::vector<ClassA*>::iterator p = v.begin();
while(p != v.end()){
ClassA* aPtr = *p;
// The next line is basically unnecessary
// It is only needed, if, for some reason, you want to make sure
// an object is also an instance of ClassB, before calling the
// function. True polymorphism doesn't need this.
if(dynamic_cast<ClassB*>(aPtr))
aPtr->neededMemberFunction();
++p;
}
}
greets,
Alex