How to use dynamic_cast on vector in C++
Hello Learners, today we are going to learn a very interesting and important topic that is dynamic_cast on vector using C++. It is one of the methods used for typecasting. The word type casting is nothing but, converting an expression of a given type into another type is known as typecasting.
dynamic_cast on vector in C++
Before going to code we need to be clear with the syntax of dynamic_cast and working of it. And dynamic_cast only works when we have at least one virtual function in the base class. That is dynamic_cast works whenever there is a polymorphism.
Syntax:
dynamic_cast<newtype>(expression)
Code:1)
#include<iostream>
using namespace std;
class base
{
public:
void sample_function()
{
cout<<"base class called "<<endl;
}
};
class derived : public base
{
public:
void sample_function()
{
cout<<"derived class called"<<endl;
}
};
int main()
{
base *b = new derived;
base *c= new base;
c->sample_function();
derived *d = dynamic_cast<derived*>(b);
if(d==0)
{
cout<<"cannot cast B* to D*";
}
else
{
cout<<"dynamic cast working sucessfully : "<<endl;
d->sample_function();
}
getchar();
return 0;
}The above code will not work it will show you an error that is:
error: cannot dynamic_cast ‘b’ (of type ‘class base*’) to type ‘class derived*’ (source type is not polymorphic)
— It means in base class we haven’t declared virtual keyword. Now try to include the virtual keyword in base class function and let’s check the output.
Code:2)
#include<iostream>
using namespace std;
class base
{
public:
void virtual sample_function()
{
cout<<"base class called "<<endl;
}
};
class derived : public base
{
public:
void sample_function()
{
cout<<"derived class called"<<endl;
}
};
int main()
{
base *b = new derived;
base *c= new base;
c->sample_function();
derived *d = dynamic_cast<derived*>(b);
if(d==0)
{
cout<<"cannot cast B* to D*";
}
else
{
cout<<"dynamic cast working sucessfully : "<<endl;
d->sample_function();
}
getchar();
return 0;
}Output:
base class called dynamic cast working sucessfully : derived class called
Also, read: Getting the Current Directory in C++
Leave a Reply