Re: abstract class and some questions
On 02/07/2014 06:08 PM, Todor Atanasov wrote:
Hi guys, it is me again.
I have entered more deep in C++ and I have reached at a point at which my knowledge is a bit....let say limited:)
This is what I want to do:
To have a CArray (just a array, could be vector, list) with objects, that can be a different classes, but all of them have one method process;
In java this is done with abstract class and then type cast, for example
abstract class Base
{
public abstract void process();
}
class Floor extends Base
{
public void process();
}
and for the loop I can have
List<Floor> objects = new ArrayList<Floor>();
for (int i = 0; i < objects.size(); i++)
{
objects.get(i).process();
}
but how to make that in C++
I can make the two classes with Base having a pure virtual method process.
But how to make the cast of Base to Floor. To me that is impossible because how would the compile knows how to do it.
The purpose of all that is that I need to process objects from different classes and I don't know how to do it.
To perform a downcasting in C++ you could use static_cast or
dynamic_cast. Use the first one *only* if you have stored the same type
of object in your container, otherwise use dynamic_cast (dynamic_cast is
C++ counterpart to Java instanceof)
// static_cast with pointers
Derived* pDer = static_cast<Derived*>(pointer_to_base_obj);
// static_cast with references
Derived& rDer = static_cast<Derived&>(base_obj);
// dynamic_cast with pointers
if (Derived* pDer = dynamic_cast<Derived*>(pointer_to_base_obj)) {
// Use pDer
...
}
else {
// pointer_to_base_obj is not of Derived type
}
// dynamic_cast with references
try {
Derived& rDer = dynamic_cast<Derived&>(base_obj);
// Use rDer
...
}
catch (std::bad_cast& e) {
// base_obj is not of Derived type
...
}
In order to use dynamic_cast your base class has to have at least one
virtual function.
Regards
--
Cholo Lennon
Bs.As.
ARG