typeid在VC中的使用
来源:互联网 发布:淘宝搜索关键词排名 编辑:程序博客网 时间:2024/06/06 00:58
typeid在VC中使用会报如下警告,运行时会终止。
warning C4541: 'typeid' used on polymorphic type 'class A' with /GR-; unpredictable behavior may result
这是因为vc默认不支持RTTI导致的,解决方法如下:
在VC的project->project settings->c\c++中Category选择C++ Language,选中Enable Run-Time Type Information(RTTI),这样就可以正常使用了。
下面附下代码:
#include <iostream.h>#include <string.h>#include <typeinfo.h>class A{public:A(char * p){s = new char[strlen(p) + 1];strcpy(s, p);cout<<"A::A "<<s<<endl;}A(A& a){if(this == &a){return;}s = new char[strlen(a.s) + 1];strcpy(s, a.s);cout<<"A::A(A&a)"<<endl;}~A(){if(s)delete s;s = NULL;cout<<"A::~A"<<endl;}virtual void what(){cout<<s<<endl;}char *s;};class B: public A{public:B(char * p):A(p){cout<<"B::B"<<endl;}~B(){cout<<"B::~B"<<endl;}};void main(){try{B a("abc");throw a;}catch (A & a){cout<<typeid(a).name()<<endl;}}
运行结果:
A::A abc
B::B
A::A(A&a)
B::~B
A::~A
class B
B::~B
A::~A
Press any key to continue
另外更正一些错误:
【如果throw的类中有字符串的话,否则会报一些警告,运行时还会死机。如果类中只有整型,是没问题的。】这句不对,只要派生类有虚函数,就会报警告,运行时也会死机。
【如果抛出的是基本类型是不会有警告的,包括整型,字符串等等。】这句也不对,警告warning C4541也是有的,但是执行不会报错。是对的,int和char *我都试过了。
代码如下:
#include <iostream.h>#include <string.h>#include <typeinfo.h>class A{public:A(int i):data(i){}A(A& ra):data(ra.data){} ~A(){} virtual void what(){cout<<endl;}int data;};class B:public A{public:B(int i):A(i){}~B(){}};void main(){try{//int i;char *p = "abc";throw p;}catch(A&ra){cout<<typeid(ra).name()<<endl;}catch(int i){cout<<typeid(i).name()<<endl;}catch(char*p){cout<<typeid(p).name()<<endl;}}
运行结果如下:
char *
Press any key to continue
一定要注意C++的多态性必须有虚函数。切记!!!
- typeid在VC中的使用
- 『typeid在VC中的使用 』
- CListCtrl在VC中的使用
- ToolTip在VC中的使用
- CHtmlCtrl在VC中的使用
- Ado在vc++中的使用
- Direct2D在VC中的使用
- OpenGL 在 VC++中的使用
- typeid使用
- vector 在vc.net中的使用
- 关于PCRE在VC中的使用
- CHtmlCtrl在VC中的使用HTML
- 水晶报表在VC 6.0中的使用
- VC++6.0在Win 8.1中的使用
- MsChart控件在VC++中的使用
- COLORREF含义及在VC++中的使用
- C++中的typeid关键字
- C++中的typeid
- bison & flex
- Schema
- 编译linux内核3.0系统出现的警告信息(原创)
- java的几种常用排序方法集合
- http://projecteuler.net/problem=6 【参考解法】
- typeid在VC中的使用
- Deep Inside Android
- 【学习笔记】C#学习笔记(操作数据库中的数据)
- Python中类成员和实例成员的区别
- 盘点谷歌史上15个最让求职者抓狂的面试题
- Android 资源
- "触宝CooTek杯” USTC Monthly Contest 2011-11-26 B&&E
- shell脚本里面一个很经典的调试方法(原创)
- 一个程序员的成长的六个阶段(转载)