本文目录一览

1,MFC的RTTI与C的RTTI有什么区别

1、mfc比c++的rtti出现的时间早,微软不得不自己搞一套。2、c++的rtti还没有实现序列化(把类型信息存盘),这样就无法动态创建,而mfc要直持动态创建和序列化。

MFC的RTTI与C的RTTI有什么区别

2,c运行时类型识别

我记得mfc里有讲这个。rtti运行时类型识别RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和 dynamic_cast。 其实,RTTI 在C++中并不是什么新的东西,它早在十多年以前就已经出现了。但是大多数开发人员,包括许多高层次的C++程序员对它并不怎么熟悉,更不用说使用 RTTI 来设计和编写应用程序了。 一些面向对象专家在传播自己的设计理念时,大多都主张在设计和开发中明智地使用虚拟成员函数,而不用 RTTI 机制。但是,在很多情况下,虚拟函数无法克服本身的局限。每每涉及到处理异类容器和根基类层次(如 MFC)时,不可避免要对对象类型进行动态判断,也就是动态类型的侦测。如何确定对象的动态类型呢?答案是使用内建的 RTTI 中的运算符:typeid 和 dynamic_cast。...详见:http://www.vckbase.com/document/viewdoc/?id=653

c运行时类型识别

3,C中有rtti机制吗

楼上两个都在搞笑。第一个谈java文不对题;第二个根本没搞清楚什么叫做RTTI,你那叫多态,和RTTI还差得远呢。RTTI,运行时类型信息,代表你可以在运行时动态获取某个类型的信息。C++支持RTTI,但是支持的很有限。而且许多C++编译器默认是不打开RTTI的,需要手工指定(比如VC6.0的编译器)C++的RTTI只提供了几个最基本的功能:1、安全的downcast,当你使用dynamic_cast动态从基类指针转换成子类指针的时候,RTTI能保证安全的转换,如果类型不符则抛出一个bad_cast异常。2、动态获取一个对象的类名称。你可以使用typeid获得一个type_info对象,这个对象保存了这个类型的最基本信息,比如名称。3、在继承树上遍历,使用typeid获得的type_info对象提供一个before方法,可以用于查找这个类型的基类。其它更复杂的比如反射和动态类型扩充等功能C++都没有提供支持。而且即使是C++标准规定的以上那些基本功能,不同的编译器实现都有较大的差异,有些编译器实现的不是很好。总之,C++是一个强调静态特性的语言,而动态特性则相对弱很多,和后来那些纯OOP语言比如java、C#、JS、Python等比起来,动态特性是很不值一提的。 所以实际项目中使用C++的RTTI也非常少,最多就是使用它的dynamic_cast来进行安全的向下转换了,别的方面基本上都不用。

C中有rtti机制吗

4,c的RTTI机制动态确定对象类型啥意思呀还有静态的

所谓静态的,是指编译期就确定的类型信息RTTI是运行时的,是动态的
楼上两个都在搞笑。第一个谈java文不对题;第二个根本没搞清楚什么叫做rtti,你那叫多态,和rtti还差得远呢。rtti,运行时类型信息,代表你可以在运行时动态获取某个类型的信息。c++支持rtti,但是支持的很有限。而且许多c++编译器默认是不打开rtti的,需要手工指定(比如vc6.0的编译器)c++的rtti只提供了几个最基本的功能:1、安全的downcast,当你使用dynamic_cast动态从基类指针转换成子类指针的时候,rtti能保证安全的转换,如果类型不符则抛出一个bad_cast异常。2、动态获取一个对象的类名称。你可以使用typeid获得一个type_info对象,这个对象保存了这个类型的最基本信息,比如名称。3、在继承树上遍历,使用typeid获得的type_info对象提供一个before方法,可以用于查找这个类型的基类。其它更复杂的比如反射和动态类型扩充等功能c++都没有提供支持。而且即使是c++标准规定的以上那些基本功能,不同的编译器实现都有较大的差异,有些编译器实现的不是很好。总之,c++是一个强调静态特性的语言,而动态特性则相对弱很多,和后来那些纯oop语言比如java、c#、js、python等比起来,动态特性是很不值一提的。 所以实际项目中使用c++的rtti也非常少,最多就是使用它的dynamic_cast来进行安全的向下转换了,别的方面基本上都不用。

5,java中传统的RTTI和反射的区别是什么

在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型;还有一种,是利用反射机制,在运行时再尝试确定类型信息。严格的说,反射也是一种形式的RTTI,不过,一般的文档资料中把RTTI和反射分开,因为一般的,大家认为RTTI指的是传统的RTTI,通过继承和多态来实现,在运行时通过调用超类的方法来实现具体的功能(超类会自动实例化为子类,或使用instance of)。传统的RTTI有3种实现方式:向上转型或向下转型(upcasting and downcasting),在java中,向下转型(父类转成子类)需要强制类型转换Class对象(用了Class对象,不代表就是反射,如果只是用Class对象cast成指定的类,那就还是传统的RTTI)instanceof或isInstance()传统的RTTI与反射最主要的区别,在于RTTI在编译期需要.class文件,而反射不需要。传统的RTTI使用转型或Instance形式实现,但都需要指定要转型的类型,比如:public void rtti(Object obj) Toy toy = Toy(obj); // Toy toy = Class.forName("myblog.rtti.Toy") // obj instanceof Toy}注意其中的obj虽然是被转型了,但在编译期,就需要知道要转成的类型Toy,也就是需要Toy的.class文件。相对的,反射完全在运行时在通过Class类来确定类型,不需要提前加载Toy的.class文件。反射那到底什么是反射(Reflection)呢?反射有时候也被称为内省(Introspection),事实上,反射,就是一种内省的方式,Java不允许在运行时改变程序结构或类型变量的结构,但它允许在运行时去探知、加载、调用在编译期完全未知的class,可以在运行时加载该class,生成实例对象(instance object),调用method,或对field赋值。这种类似于“看透”了class的特性被称为反射(Reflection),我们可以将反射直接理解为:可以看到自己在水中的倒影,这种操作与直接操作源代码效果相同,但灵活性高得多。关于Java的反射API,没必要去记忆,可以在任何JDK API中查询即可

6,java中的RTTI是什么意思

Runtime Type Information 运行时类型信息
在java中,有两种rtti的方式,一种是传统的,即假设在编译时已经知道了所有的类型;还有一种,是利用反射机制,在运行时再尝试确定类型信息。严格的说,反射也是一种形式的rtti,不过,一般的文档资料中把rtti和反射分开,因为一般的,大家认为rtti指的是传统的rtti,通过继承和多态来实现,在运行时通过调用超类的方法来实现具体的功能(超类会自动实例化为子类,或使用instance of)。传统的rtti有3种实现方式:向上转型或向下转型(upcasting and downcasting),在java中,向下转型(父类转成子类)需要强制类型转换class对象(用了class对象,不代表就是反射,如果只是用class对象cast成指定的类,那就还是传统的rtti)instanceof或isinstance()传统的rtti与反射最主要的区别,在于rtti在编译期需要.class文件,而反射不需要。传统的rtti使用转型或instance形式实现,但都需要指定要转型的类型,比如:public void rtti(object obj) toy toy = toy(obj); // toy toy = class.forname("myblog.rtti.toy") // obj instanceof toy}注意其中的obj虽然是被转型了,但在编译期,就需要知道要转成的类型toy,也就是需要toy的.class文件。相对的,反射完全在运行时在通过class类来确定类型,不需要提前加载toy的.class文件。反射那到底什么是反射(reflection)呢?反射有时候也被称为内省(introspection),事实上,反射,就是一种内省的方式,java不允许在运行时改变程序结构或类型变量的结构,但它允许在运行时去探知、加载、调用在编译期完全未知的class,可以在运行时加载该class,生成实例对象(instance object),调用method,或对field赋值。这种类似于“看透”了class的特性被称为反射(reflection),我们可以将反射直接理解为:可以看到自己在水中的倒影,这种操作与直接操作源代码效果相同,但灵活性高得多。关于java的反射api,没必要去记忆,可以在任何jdk api中查询即可

文章TAG:mfc  rtti  有什么  什么  RTTI  
下一篇