C++中的typeid和dynamic_cast

1、typeid在没有虚函数时(不涉及到动态联编),typeid仅仅返回其操作对象的实际类型

2、typeid涉及到动态联编问题时(使用基类指针p或者引用p操作派生类对象),typeid(p)返回基类类型,typeid(*p)返回派生类类型;typeud(&p)返回基类类型,typeid(p)返回派生类类型

3、dynamic_cast在动态联编(实时类型信息)问题中,可以实现基类指针(或引用)和派生类指针(或引用)之间的尝试性动态转换

#include "stdafx.h"
#include <iostream>
#include <typeinfo>
using namespace std;

class Base
{
public:
	int m_base;
	virtual void show()
	{
		cout<<"This is Base class"<<endl;
	}
};
class Derived:public Base
{
public:
	int m_derived;
	void show()
	{
		cout<<"This is Derived class"<<endl;
	}
};

int main(int argc,char* argv[])
{
	Base *pb=new Derived();

	cout<<typeid(pb).name()<<endl;
	cout<<typeid(*pb).name()<<endl;

	system("pause");
	return 0;
}

C++中的typeid和dynamic_cast,布布扣,bubuko.com

时间: 2024-08-06 20:07:26

C++中的typeid和dynamic_cast的相关文章

C++该typeid和dynamic_cast

1.typeid在没有虚拟函数的(不相关的动态绑定),typeid它只返回操作对象的实际类型 2.typeid涉及到动态联编问题时(使用基类指针p或者引用p操作派生类对象),typeid(p)返回基类类型,typeid(*p)返回派生类类型:typeud(&p)返回基类类型.typeid(p)返回派生类类型 3.dynamic_cast在动态联编(实时类型信息)问题中,能够实现基类指针(或引用)和派生类指针(或引用)之间的尝试性动态转换 #include "stdafx.h"

Qt元对象系统源码解析

Qt元对象系统源码解析 https://blog.51cto.com/9291927/2070348 一.Qt元对象系统简介 1.元对象系统简介 Qt 的信号槽和属性系统基于在运行时进行内省的能力,所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力, 比如如果语言具有运行期间检查对象型别的能力,那么是型别内省(type intropection)的,型别内省可以用来实施多态.C++的内省比较有限,仅支持型别内省, C++的型别内省是通过运行时类型识别(RTTI)(Run-Time Typ

C++中static_cast/const_cast/dynamic_cast/reinterpret_cast的区别和使用

C风格的强制转换较简单,如将float a转换为int b,则可以这样:b = (int)a,或者b=int(a). C++类型转换分为隐式类型转换和显示类型转换. 隐式类型转换又称为标准转换,包括以下几种情况: (1).算术转换:在混合类型的算术表达式中,最宽的数据类型成为目标转换类型: (2).一种类型表达式赋值给另一种类型的对象:目标类型是被赋值对象的类型: (3).将一个表达式作为实参传递给函数调用,此时形参和实参类型不一致:目标转换类型为形参的类型: (4).从一个函数返回一个表达式,

C++中static_cast, dynamic_cast用法

前言 Android的Framework层源码中有很多强制类型转换函数的调用.写惯了C代码的人一般都习惯下面这种强制转换方式: double a = 89; int b = (int)a; 但是,在C++代码中,不推荐使用C这种(type-id)的强制转换风格代码,更推荐使用C++的标准类型转换符:static_cast和dynamic_cast. static_cast static_cast的函数原型如下: static_cast<type-id>(expression) 说明: 该运算符

C++中static_cast和dynamic_cast强制类型转换

在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast. 一.static_cast关键字(编译时类型检查) 用法:static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性,它主要有如下几种用法: (1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以理解为保证

C++中获取数据类型typeid

有时候,为了达到某种目的,我们需要获取数据类型,这个类型无论是内置类型还是自定义类型,包括类类型:  在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许"用指向基类的指针或引用来操作对象"的程序能够获取到"这些指针或引用所指对象"的实际派生类型.在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和ty

c++中RTTI

RTTI 是"Runtime Type Information"的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI:本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和 dynamic_cast.如何确定对象的动态类型呢?答案是使用内建的 RTTI 中的运算符:typeid 和 dynamic_cast. typeid的

C++中3种多态实现机制之RTTI

多态(Polymorphism)按字面的意思就是“多种状态”.在面向对象的语言中,接口的多种不同的实现方式即为多态.引用Charlie Calverts对多态的描述——多态性是允许你将基类设置成为和一个或更多的他的子类相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作. RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并

typeid详解

在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型.在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和 typeid. dynamic_cast允许运行时刻进行类型转换,从而使程序能够在一个类层次结构中安全地转化类型,与之相对应的还有一个