RTTI之typeid运算符】的更多相关文章

1 #include <iostream> 2 #include <cstdlib> 3 #include <ctime> 4 #include <typeinfo> 5 6 using std::cout; 7 class Grand 8 { 9 private: 10 int hold; 11 public: 12 Grand(int h=0):hold(h){} 13 virtual void Speak() const {cout <<…
dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或volatile属性...下面主要说多态下的RTTI: 使用条件: 基类应有虚函数. 编译器需启用Runtime Type Information/Identification(RTTI),运行时类型信息.VS下在项目属性页下启用,如下,选 是: (VS2013测试:默认的留空不选也能正常使用dynam…
(转载请注明原创于潘多拉盒子) C++的模板可以帮助我们编写适合不同类型的模板类,给代码的复用性提供了极大的方便.近来写了一个涉及单例的C++模板类,简化下来可以归结为以下的代码: template <typename T> class Singleton { public: // 此处省去了多线程安全锁 static T* getInstance() { static T t; return &t; } }; 那么如果希望对某个work horse类,比如叫做Foo,定义一个Sing…
Wrote by mutouyun. (http://darkc.at/cxx-get-the-name-of-the-given-type/)   地球人都知道C++里有一个typeid操作符可以用来获取一个类型/表达式的名称: std::cout << typeid(int).name() << std::endl; 但是这个name()的返回值是取决于编译器的,在vc和gcc中打印出来的结果如下: int // vc i   // gcc 一个稍微长一点的类型名称,比如: c…
#include <iostream> #include <cstdlib> #include <ctime> using std::cout; class Grand { private: int hold; public: Grand(int h=0):hold(h){} virtual void Speak() const {cout << "I am a grand class!\n";} virtual int Value()…
RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   编辑本段RTTI介绍 RTTI提供了以下两个非常有用的操作符:   (1)typeid操作符,返回指针和引用所指的实际类型:   (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用.   面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持. 本文将简略介绍 RTT…
参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   RTTI提供了以下两个非常有用的操作符:   (1)typeid操作符,返回指针和引用所指的实际类型:   (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用.   面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持. 本文将简略介绍 RTTI 的一些背…
RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI:本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和 dynamic_cast. 其实,RTTI 在C++中并不是什么新的东西,它早在十多年以前就已经出现了.但是大多数开发人员,包括许多高层次的C++程序员对它并不怎…
RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型. (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指针或引用.  面向对象的编程语言,象C++,Java,delphi都提供了对RTTI的支持. 本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念…
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-child(…
转自:http://blog.chinaunix.net/uid-28541347-id-4251713.html 从RTTI谈C++的向下转型 1.什么是RTTI? RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.允许“用指向基类的指针或引用来操纵对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型.在 c++中,为了支持 RTTI 提供了两个操作符 :     1 dynamic_cast 操作符:它…
C++为了能够在运行时正确判断一个对象确切的类型,加入了RTTI和type_info. type_info 为每一个类型增加一个type_info对象. 为了能够在运行时获得对象的类型信息type_info,C++增加了两个运算符:typeid 和 dynamic_cast<>.type_info 常用的三个成员函数是 operator==().operator!=() 和 name(),请参考标准头文件<typeinfo>. typeid 运算符 它以一个对象或者类型名作为参数,…
运行时类型识别RTTI(Runtime Type Identification) C++有三个支持RTTI的元素.* 如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针:否则,该运算符返回0——空指针.* typeid运算符返回一个指出对象的类型的值.* type_info结构存储了有关特定类型的信息.只能将RTTI用于包含虚汗数的类层次结构,原因在于只有对于这种类层次结构,才应该将派生对象的地址赋给基类指针. 1.dynamic_cast运算符dyn…
C++异常处理和RTTI技术 20130930 1.异常处理的基本知识 C语言中是没有内置运行时错误处理机制,对于错误发生的时候使用的几种处理机制: 函数返回彼此协商后统一定义的状态编码来表示操作成功.失败或者是其他类型的错误:使用全局变量来保存错误编码,每一个使用到他的函数在开始的时候都会检查他的值,并且每一个函数的操作结果都会写到这个全局变量中,如使用errno表示任何一个函数调用返回后产生的错误码:出错的时候终止程序的运行. 但是这些传统的方法村下载一些问题:没有形成统一的标准:将正常的代…
static_cast const_cast reinterpret_cast 运行时类型识别(RTTI) dynamic_cast 哪种情况下dynamic_cast和static_cast使用的情况一样? 什么情况下使用dynamic_cast代替虚函数? typeid 命名的强制类型转换形式如下: cast_name<type>(expression); 其中:cast_name指static_cast.dynamic_cast.const_cast.reinterpret_cast中的…
在前面已经探讨过了虚继承对类的大小的影响,这次来加上虚函数和虚继承对类的大小的影响. 先来回顾一下之前例子的代码: #include <iostream> using namespace std; class BB { public: int bb_; }; class B1 : virtual public BB { public: int b1_; }; class B2 : virtual public BB { public: int b2_; }; class DD : public…
1. C++有三个支持RTTI的元素. 如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针,否则,该运算符返回0--空指针. typeid运算符返回一个对type_info对象的引用. type_info结构存储了有关特定类型的信息. 只能将RTTI用于包含虚函数的类层次结构,原因在于只有对于这种类层次结构,才应该将派生对象的地址赋给基类指针. 2. 通常,如果指向的对象(*pt)的类型为Type或者是从Type直接或间接派生而来的类型,则下面的表达式…
1.实现方式 typeid运算符,返回表达式的类型 dynamic_cast运算符,基类的指针或引用安全地转换成派生类的指针或引用 2.适用于:使用基类的指针或引用执行派生类的操作,且该操作不是虚函数. 3.使用风险:程序员必须清楚地知道转换的目标类型,且必须检查类型转换是否被成功执行.尽可能用虚函数 3.1 指针类型 if (Derived *dp =dynamic_cast<Derived*>(bp))//将Base类型的bp转化为Derived类型的dp,安全 { //dp指向Deriv…
excerpted from Type conversions K&R Section 2.7 p59 对type conversion 的解释: The precise meaning of a cast is as if the expression were assigned to a variable of the specified type, which is then used in place of the whole construction. (类型名) 表达式 将被转换的表…
decltype简介 我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行.RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应type_info数据,通过name成员函数返回类型的名称.同时在C++11中typeid还提供了hash_code这个成员函数,用于返回类型的唯一哈希值.RTTI会导致运行时效率降低,且在泛型编程中,我们更需要的是编译时就要确定类型,RTTI并无法满足这样的要求.编译时类型推导的出现正是为了泛型编程,…
一.友元 类并非只能拥有友元函数,也可以将类作为友元.在这种情况下,友元类的所有方法都可以访问原始类的私有成员和保护成员.另外,也可以做更严格的限制,只将特定的成员函数指定为另一个类的友元.哪些函数.成员函数或类为友元是由类定义的,而不能从外部强加友情.因此,尽管友元被授予从外部访问类的私有部分的权限,但它们并不与面向对象的编程思想相违背:相反,它们提高了公有接口的灵活性. 1.友元类 一般来说,如果希望一个类型的对象发生变化时,另一个其他类型的对象也相应地跟着产生变化,可以使用友元类来实现.…
怡化主管强烈要求我读这本书.... 笔记尚未完成,持续更新呗.. 第1章 高质量软件开发之道 1.1 软件质量基本概念 1.1.1 如何理解软件的质量:功能性和非公能性 1.1.2 提高软件质量的基本方法: 一次性编出高质量的程序 1.1.3 "零缺陷"理念 1.2 细说软件质量属性 1.2.1 正确性: 需求范围内的需求 1.2.2 健壮性  需求外的扩展需求 1容错  2恢复 1.2.3 可靠性  你平均无故障时间衡量 1.2.4 性能  时间-空间效率 优化数据结构,算法,代码来…
<C++ Primer中文版(第5版)> 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼)    Josee Lajoie(约瑟 拉乔伊)    Barbara E. Moo (芭芭拉 默)    译者: 王刚 杨巨峰 出版社:电子工业出版社 ISBN:9787121155352 上架时间:2013-8-21 出版日期:2013 年9月 开本:16开 页码:848 版次:5-1 所属分类:计算机 > 软件与程序设计 > C++ > C++ 更多关…
深度探索C++对象模型 什么是C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各个支持的底层实现机制. 抽象性与实际性之间找出平衡点, 需要知识, 经验以及许多思考. 导读 这本书是C++第一套编译器cfront的设计者所写. 了解C++对象模型, 有助于在语言本身以及面向对象观念两方面层次提升. explicit(明确出现于C++程序代码). implicit(隐藏于程序代码背后). 关于对象 每个非内联(non-inline)成员函数只会诞生一个函数实例. 而内联函数会在每个使…
本文写于2017-02-24,从老账号迁移到本账号,原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=6440685 一:对象模型 C++面向对象的实现,相对于C耗费成本是由virutal引起的.包括 virtual function机制,用来支持执行期绑定. virutal base class 虚基类机制,以实现共享虚基类的subobject 此外还有多重继承下,发生在其第二或后继派生类之间的转换. C++对象模型,所有非静态数据成员存储在对象…
第1章 预备知识 (已看) 第2章 开始学习C++ (已看) 第3章 处理数据 (已看) 第4章 复合类型 (已看) 第5章 循环和关系表达式 (已看) 第6章 分支语句和逻辑运算符 (已看) 第7章 函数-C++的编程模块  (已看) 第8章 函数探幽 (已看) 第9章 内存模型和名称空间 (已看) 第10章 对象和类 (已看) 第11章 使用类 (已看) 第12章 类和动态内存分配 (已看) 第13章 类继承 (已看) 第14章 C++中的代码重用 (已看) 第15章 友元,异常和其他 (已…
重载new和delete 1调用operator new( 或new[])标准库函数分配足够大的.原始的.未命名的内存空间以便存储特定类型的对象 2编译器运行相应地构造函数以构造这些对象,并为其传入初始值 3返回一个指向该对象的指针 可以在全局作用域定义operator new,也可以定义为成员函数 如果是类类型,首先在本类及其基类中查找,否则在全局域中查找,最后使用标准库定义版本. //这些版本可能抛出异常 void operator new(size_t); void operator ne…
我们之前使用的typeid运算符来查询一个变量的类型,这种类型查询在运行时进行.RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回的变量相应type_info数据,通过name成员函数返回类型的名称.同时在C++11中typeid还提供了hash_code这个成员函数,用于返回类型的唯一哈希值.RTTI会导致运行时效率降低,且在泛型编程中,我们更需要的是编译时就要确定类型,RTTI并无法满足这样的要求.编译时类型推导的出现正是为了泛型编程,在非泛型编程中,我们的…
==========================================================================day11 面向对象程序设计========================================================================== 1.面向对象程序设计的核心思想是数据抽象.继承.动态绑定(也叫封装.继承.多态) 数据抽象:将类的接口和实现分离.继 承:可以定义相似的类型并对其相似关系建模.动态绑定:可以…
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/chudaxiakkk/article/details/30502807 第15章 友元.异常和其它 1.友元不仅有友元函数.还能是友元类 还能够将类中的某一个成员函数指定为还有一个类的友元 虽然友元被授予从外部訪问私有部门的权限.单并不与面向对象编程思想相愽,相反.它们提高了公有接口的灵活性 2.类的成员函数作为其它类的友元,涉及到类的声明顺序. 还有一个函数作为两个类的友元 这方面内容看P607…