学习笔记之深入浅出MFC 第8章 C++重要性质--- 执行期类型信息(RTTI)

关于执行期类型信息,可能大多数朋友比较陌生,确实我们在平时的编程过程中很少使用,那么所谓的执行期类型信息到底是什么呢?

其实说穿了也很简单,单单从名称上已经说的很清楚了。就是在程序执行过程中知道某个对象是属于哪一种类型。执行期类型信息(Runtime Type  Information,RTTI)在较先进的编译器(如Visual C++4.0)之后都广泛支持。

下面还是用一段代码来说明一下:

#include  <typeinfo.h>           //执行类型信息的头文件

#include  <iostream.h>

#include  <string.h>

首先是基类声明

class  graphicImage

{

protected:

char  name[80];

public:

graphicImage()

{

strcpy(name, "graphicImage");

}

virtual   void  display()

{

cout<<"Display  a   generic  image." <<endl;

}

char*   getName()

{

return  name;

}

};

//子类

class   GIFimage  :   public   graphicImage

{

public:

GIFimage()

{

strcpy(name,  "GIFimage");

}

void  display()

{

cout <<  "Display  a  GIF  file."  <<endl;

}

};

 class  PICTimage  :  public  graphicImage

{

public:

PICTimage()

{

strcpy(name,  "PICTimage");

}

void  display()

{

cout << "Display  a  PICT  file. "  << endl;

}

};

void   processFile(graphicImage *  type)

{

if (typeid(GIFimage) == typeid( *type))                //*********RTTI应用

{

((GIFimage  *)type) ->display();

}

else  if  (typeid( PICTimage)   ==  typeid(*type))

{

((PICTimage *)type) ->display();

}

else

cout << "Unknow  type! "  <<  (typeid(*type)).name()  << endl;

}


void  main()

{

graphicImage  *gImage   =  new  GIFimage();

graphicImage  *pImage   =  new  PICTimage();


processFile(gImage);

processFile(pImage);

}


执行结果如下:

Display  a  GIF  file.

Display  a PICT  file.

这个程序与RTTI相关的地方有三个:

1、编译时需选用 /GR选项(/GR的意思是enable  C++ RTTI)

2、载入typeinfo.h

3、新的typeid云算子。参数可以是类名称,也可以是对象指针。

MFC的RTTI能力牵扯到一组非常神秘的宏(DECLARE_DYNAMIC、IMPLEMENT_DYNAMIC)和一个非常神秘的类(CRuntimeClass)。下面会有介绍。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值