C++ 之RTTI

原创 2015年07月08日 19:28:29

RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或者引用来检查这些指针或引用所指的对象的实际派生类对象。

RTTI提供了以下两个非常有用的操作符:
(1)typeid操作符,返回指针和引用所指的实际类型。
(2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用,dynamic_cast在转换的过程中必须有虚函数
#include<iostream>
using namespace std;

class A
{
private:
	int num;
};
class B:public A
{
private:
	int num;
};
void main()
{
	A *pa = new A;
	A *pb = new B;
	cout << "*pa: " << typeid(*pa).name()<< "     *pb: "<<typeid(*pb).name() << endl;
	cout << "pa: " << typeid(pa).name ()<< "     pb: " << typeid(pb).name() << endl;

	cin.get();
}

可以看出typeid解析出*pa和*pb 都为class A

#include<iostream>
using namespace std;

class A
{
private:
	int num;
	virtual void go()
	{
	}

};
class B:public A
{
private:
	int num;
void go()
	{
	}
};
void main()
{
	A *pa = new A;
	A *pb = new B;
	cout << "*pa: " << typeid(*pa).name()<< "     *pb: "<<typeid(*pb).name() << endl;
	cout << "pa: " << typeid(pa).name ()<< "     pb: " << typeid(pb).name() << endl;

	cin.get();
}

从这可以看出,虚函数可以确定数据类型。

#include<iostream>
using namespace std;

class A
{
private:
	int num;
	virtual void go()
	{
	}

};
class B:public A
{
private:
	int num;
void go()
	{
	}
};
void main()
{
	A *pa = new A;
	A *pb = new B;
	B *pb1 = dynamic_cast<B*>(pa);
	B *pb2 = dynamic_cast<B*>(pb);

	if (pb1 == nullptr)
	{
		cout << "pa转换失败" << endl;//由于pa指向的A的对象但是其中并没有B的对象实体,在安全情况下其返回为空。
	}

	if (pb2 == nullptr)
	{
		cout << "pb转换失败" << endl;
	}


	cin.get();
}


版权声明:欢迎转载,如有不足之处,恳请斧正。

相关文章推荐

c++ RTTI解析

  • 2013-09-23 14:20
  • 394KB
  • 下载

《C++ Primer plus》学习笔记之”RTTI”

1. 运行阶段类型识别(RTTI) RTTI是运行阶段类型识别的简称,它为程序在运行阶段确定对象的类型提供了一种标准方式。组要注意的是,他们只适用于包含虚函数的对象。 RTTI主要...

C++之RTTI

RTTI(Run-Time Type Identification 运行时类型识别)是面向对象程序设计中一种重要的技术。         和很多其他语言一样,C++是一种静态类型语言。其数据类型是在...

关于C++中RTTI的编码实现

http://www.cnblogs.com/xiaoyuer323/archive/2005/06/24/180183.html关于C++中RTTI的编码实现摘要:  RTTI(Run-Time T...

C++知识文档十二_运行时类型信息RTTI

运行时类型信息的概念 我们要从面向对象的程序设计角度来理解运行时类型信息(Run-time Type Identification)的概念,面向对象程序设计涉及到一系列技术,这些技术基于类层次机制,...

C++之RTTI

RTTI定义:RTTI:Run Time Type Identification,运行时类型识别:指程序能够使用基类的指针或引用来检索其所指对象的实际派生类型使用方式:C++中有两个操作符提供RTTI...

C++中的类型转换之RTTI

RTTI也就是运行时的类型识别,程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际派生类型。   对于带虚函数的类,在运行时执行RTTI操作符,但对于其他类型,在编译时计算RTTI操作符。...
  • vmezr
  • vmezr
  • 2014-03-13 08:47
  • 732

一个简单的C++的RTTI实现

http://blog.csdn.net/wzq9706/article/details/7028105 前两天,跟刘总讨论工厂模式时,从其金口(^-^)中得知有反射和RTTI这两种模式...

高质量程序设计指南-c/c++语言:笔记之异常处理RTTI

高质量程序设计指南-c/c++语言:笔记之异常处理和RTTI(运行时类型定义) *. c++保证:如果一个异常在抛出点没有得到处理,那么它将一直被跑向上层调用者,直至main()函数,直到找...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)