#include "stdafx.h"
#include <typeinfo.h>
#include <iostream.h>
#include <string.h>
class grapicImage
{
protected:
char name[80];
public:
grapicImage()
{
strcpy(name,"grapicimage");
}
virtual void display()
{
cout<<"display a generic image"<<endl;
}
char * getName()
{
return name;
}
};
class GifImage :public grapicImage
{
public:
GifImage()
{
strcpy(name,"gifimage");
}
void display()
{
cout<<"display a gif image"<<endl;
}
};
class PICTImage :public grapicImage
{
public:
PICTImage()
{
strcpy(name,"PICT image");
}
void display()
{
cout<<"display a pict image"<<endl;
}
};
void ProcessFile(grapicImage* pImage)
{
if(typeid(*pImage)==typeid(GifImage))
{
((GifImage*)pImage)->display();
}
else
if(typeid(*pImage)==typeid(PICTImage))
{
((PICTImage*)pImage)->display();
}
else
{
cout << "Unknown type! " << (typeid(*pImage)).name() << endl;
}
}
int main(int argc, char* argv[])
{
grapicImage *gImage = new GifImage();
grapicImage *pImage = new PICTImage();
ProcessFile(gImage);
ProcessFile(pImage);
return 0;
}
程序运行结果如下: