Hi,
i got a base class,and 2 derieved classes.derieved1 and derieved 2.
In the main class,i create a derieved1 and derieve2 object. add it to vector vector<base*> list .
Then i try casting out the first vector item to see if dereived 1 or derieved2. the tests to check if derieved 1 or 2 work for both.
The classes:
Code:
class base{
protected:
base(int val){
value=val;
}
public:
int value;
};
class derieved1:public base {
private:
string data;
public:
derieved1(int val,string x):base(val),data(x){ }
void print(){
cout<<"\ndereieved 1";
}
};
class derieved2:public base {
private:
string data;
public:
derieved2(int val,string x):base(val),data(x){
}
void print(){
cout<<"\ndereieved 2";
}
};
the main function:
Code:
int main(int argc, char *argv[])
{
vector<base*> list;
derieved1* a=new derieved1(1,"derieved1");
derieved2* b=new derieved2(2,"derieved2");
list.push_back(a);
list.push_back(b);
base* bbbb=list[0];
//cast it to both derieved objects.
derieved1*sb=static_cast<derieved1*>(bbbb);
derieved2*sb1=static_cast<derieved2*>(bbbb);
//check which one is valid.
if(sb){
cout<<"object of type derieved1"<<endl;
}
if(sb1){
cout<<"object of type derieved2"<<endl; //should not display
}
system("PAUSE");
return EXIT_SUCCESS;
}
The program prints outs :
object of type derieved1
object of type derieved2