C++中的关键字--typeid

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值