468,242 Members | 1,902 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,242 developers. It's quick & easy.

Run-time typing...

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?
Aug 16 '07 #1
3 1101
barcaroller 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?
Let ClassB derive from ClassA. Have polymorphic behaviour in them,
and the choice of the behaviour leave to ClassA's non-virtual member
function which will check your data fields.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Aug 16 '07 #2
On Wed, 15 Aug 2007 22:10:01 -0400, "barcaroller"
<ba*********@music.netwrote:
>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
Aug 16 '07 #3
Alexander Dünisch wrote:
On Wed, 15 Aug 2007 22:10:01 -0400, "barcaroller"
<ba*********@music.netwrote:
>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();
Given your hierarchy and the implementation of the virtual function
in ClassA (which does nothing), there's no need for the dynamic_cast.
At all.
++p;
}
}
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Aug 16 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

13 posts views Thread by Bob Day | last post: by
3 posts views Thread by emman_54 | last post: by
19 posts views Thread by Bryan | last post: by
9 posts views Thread by Brett Wesoloski | last post: by
8 posts views Thread by David Thielen | last post: by
3 posts views Thread by traceable1 | last post: by
reply views Thread by NPC403 | last post: by
reply views Thread by kermitthefrogpy | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.