C++中的关键字--typeid
来源:互联网 发布:博弈大师模拟软件 编辑:程序博客网 时间:2024/06/08 18:26
C++中有很多关键字,作为程序猿一族,用的少可以原谅,但是不知道就有点儿说不过去了,所以来说说typeid关键字的作用:
主要作用是:返回指针或者引用所指对象的实际类型。
用法:
father *p=new father;
cout<<typeid(p).name(); //结果是:father *;
下面来看一个实例:
#include <iostream>using namespace std;class father{public:int a ;double b;father(){}virtual void show(){cout<<"father"<<endl;}};class son:public father{public:int c;void show(){cout<<"son"<<endl;}son(){}};class grandson:public father{public:void show(){cout<<"grandson"<<endl;}};int main(){father a;father *p=new father;father &b=a;father *p1=new son;father *p2=new grandson;cout<<sizeof(p)<<endl;cout<<sizeof(b)<<endl;cout<<sizeof(father)<<endl;cout<<sizeof(p1)<<endl;cout<<typeid(p1).name()<<endl;cout<<typeid(*p1).name()<<endl;cout<<typeid(*p2).name()<<endl;system("pause");return 0;}
当show()函数没有加virtual时:其结果如下:
当将show()函数设置虚函数时:
可以看出返回的指针的实际类型都不一样,
由上面的代码可以看出:
son和grandson继承father类,此时有father类型的指针p1和p2,并且把son和grandson的首地址赋给p1和p2,因为father类中有虚函数show(),
所以typeid(p1)是class father*的,但是要是typeid(*p1)就是 class son类型的。返回的是他们的实际类型,但是如果没有virtual,则返回的都是calss father类型的;
如果要判断p1,p2....pn中的任意两个对象是不是一样的,就可以比较typeid(*p1)和typeid(*p2)是否相等。如果相等,那它们就是指向同一个对象。
BUT
如果是typeid(p1) != typeid(p2)的话,那他们是恒等的,因为都是class fatner *,,无论有么有virtual关键字;
4 0
- C++中的typeid关键字
- C++中的typeid关键字
- C++中的typeid关键字
- C++中的关键字--typeid
- C++中的typeid关键字
- C++中的typeid关键字
- C++中的typeid关键字
- 关键字:typeid
- C++ 关键字 typeid, typename
- C++关键字之typeid
- C++ 关键字typeid
- C++ 关键字 typeid, typename
- C++ 关键字typeid
- C++ 关键字typeid
- C++ 关键字typeid
- C++ 关键字typeid
- C++ 关键字typeid
- C++ 关键字typeid
- 【bzoj4431】[Nwerc2015]Hole in One一杆进洞
- 数据挖掘各种算法JAVA的实现方法
- uva839
- MySQL学习笔记(4) 2016-04-10
- hdu_4417_Super Mario
- C++中的关键字--typeid
- EasyAR脱卡方法
- WEB项目中使用UEditor(富文本编辑器)
- string操作函数
- BJTU 1687 lisp的解释器
- 自考那些事儿(七):信息资源管理(总述篇)
- 【剑指offer系列】 最小的k个数___30
- Java多态
- sdau-2 1002