I have written a function that determines which class object is passed, using dynamic_casting. Inside the condition, can I use static_cast to actually cast the object?
For example, inside someFunc()
class Base
{
public:
Base() { cout << "Base::Base" << endl; }
virtual ~Base() { cout << "Base::~Base" << endl; }
};
class Derived1 : public Base
{
public:
void func1() { cout << "Derived1::func1()" << endl; }
};
class Derived2 : public Base
{
public:
void func2() { cout << "Derived2::func2()" << endl; }
};
void someFunc(Base * bp)
{
if(dynamic_cast<Derived1 *>(bp))
{
Derived1 * d1 = static_cast<Derived1 *>(bp); // static_cast ok?
d1->func1();
}
else if(dynamic_cast<Derived2 *>(bp))
{
Derived2 * d2 = static_cast<Derived2 *>(bp); // static_cast ok?
d2->func2();
}
else
cout << "None" << endl;
}
int main()
{
Derived1 * derived1 = new Derived1;
Derived2 * derived2 = new Derived2;
vector<Base *> vb;
vb.push_back(derived1);
vb.push_back(derived2);
// ---- Passing to someFunc() ----
someFunc(vb.at(0));
someFunc(vb.at(1));
}