/*(base)A->B->C->D(derived)
B* b=new C;
A* a=b; //OK
A* a=new D;
A* a=new B; //next line will return NULL
C* c=dynamic_cast<C*>(a); //OK
*/
#include<iostream>
using namespace std;
class instrument
{
public:
virtual void play()=0;
};
class guitar:public instrument
{
public:
void play()
{
cout<<"Guitar played.\n";
}
};
class piano:public instrument
{
public:
void play()
{
cout<<"Piano played.\n";
}
};
int main()
{
instrument *s=new guitar;
//Guitar played
s->play();
delete s;
//Piano played
s=new piano;
s->play();
delete s;
return 0;
}