#include <iostream>
using namespace std;
class Fish
{
public:
virtual void swim()
{
cout<<"Fish swims in water"<<endl;
}
virtual ~Fish(){}
};
class Tuna : public Fish
{
public:
void swim()
{
cout<<"Tuna swims in sea"<<endl;
}
void becomeDinner()
{
cout<<"Tuna become dinner"<<endl;
}
};
class Carp : public Fish
{
public:
void swim()
{
cout<<"Carp swims in lake"<<endl;
}
void talk()
{
cout<<"Carp can talk"<<endl;
}
};
void detectFishType(Fish *pFish)
{
Tuna *pTuna = dynamic_cast<Tuna*>(pFish);
if (pTuna)
{
pTuna->becomeDinner();
}
Carp *pCarp = dynamic_cast<Carp*>(pFish);
if (pCarp)
{
pCarp->talk();
}
pFish->swim();
}
//动态类型转换dynamic_cast
int main()
{
Fish fish;
//Fish swims in water
detectFishType(&fish);
Tuna tuna;
//Tuna become dinner
//Tuna swims in sea
detectFishType(&tuna);
Carp carp;
//Carp can talk
//Carp swims in lake
detectFishType(&carp);
system("pause");
return 0;
}