NoVirtualBase* NvirBase = new NovirtualDerivd();

    NvirBase->print();

   // auto nd1 = dynamic_cast<NovirtualDerivd*>(NvirBase);//必须有虚方法

    auto nd11 = static_cast<NovirtualDerivd*>(NvirBase);
nd11->print2();
nd11->print();
delete NvirBase;
dynamic_cast 需要有虚方法的类,否则无法通过编译
这没有虚方法时,父子类转换用static_cast。
static_cast向上得行,向下没有发生类型转换也得行。
std::cout << "============================rtti static_cast====================\n";
RttiTestBase* b0 = new RttiTestBase();
auto* b7 = static_cast<RttiTestDerivd2*>(b0);
if (b7 == nullptr) {
std::cout << "b7 can not\n";
}
else {
std::cout << "b7 can\n";
b7->say2();
b7->say3();
}
delete rd1, rd2, b0;
以上代码 从基类对象 b0 向下转换成子类RttiTestDerivd2,发现可以调用只有RttiTestDerivd2这个类里面拥有得方法say3。感觉很神奇。书上说无需进行类型转换就可以,不是很明白。估计那些超类里得成员变量都时默认值吧。
而且最根本得父类得有默认构造函数,我试了,如果根父类没有默认构造函数,向下转换时不行得。
比如RttiTestDerivd2作为间接子类和他得直接父类RttiTestDerivd(代码没给出来)都没有默认构造函数,而RttiTestBase(根父类)却是有一个隐藏得默认构造函数,这种情况下,这种向下转换在我这种情况下是可以得。
如果RttiTestDerivd2里有一个其他类对象 比如A,那么这个A也需要有默认构造函数,我试了,如果没有默认构造函数,是在运行阶段回报错,报错原因是没有合适得构造函数。
 
const_cast 能把一个const指针变为普通指针。

c++ RTTI Runtime Type Identification 运行阶段类型识别的更多相关文章

  1. MFC中的RTTI(Runtime Type Identification, 运行时类型识别)详解(参考《深入浅出MFC》)

    在MFC中的RTTI的实现,主要是利用一个名为CRuntimeClass的结构来链接各个"有关系的类"的信息来实现的.简单来说,就是在需要用到RTTI技术的类内建立CRuntime ...

  2. RTTI (Run-Time Type Identification,通过运行时类型识别) 转

    参考一: RTTI(Run-Time Type Identification,通过运行时类型识别)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型.   RTTI提供了以下两个 ...

  3. C++ - RTTI(RunTime Type Information)执行时类型信息 具体解释

    RTTI(RunTime Type Information)执行时类型信息 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details ...

  4. C++_新特性2-RTTI运行阶段类型识别

    这部分属于C++的新特性,感觉比较高阶的特性.我把它归于属于奇技淫巧的范畴.了解即可. RTTI是运行阶段类型识别(Runtime Type Identification)的简称. 这是添加到C++中 ...

  5. RTTI (Run-time type information) in C++

    In C++, RTTI (Run-time type information) is available only for the classes which have at least one v ...

  6. c++ RTTI(runtime type info)

    RTTI(Run-Time Type Information,通过运行时类型信息)程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型. RTTI提供了以下两个非常有用的操作符: ...

  7. c++对象模型和RTTI(runtime type information)

    在前面已经探讨过了虚继承对类的大小的影响,这次来加上虚函数和虚继承对类的大小的影响. 先来回顾一下之前例子的代码: #include <iostream> using namespace ...

  8. RTTI(Runtime Type Information )

    RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并通 ...

  9. Java基础之RTTI 运行时类型识别

    运行时类型识别(RTTI, Run-Time Type Identification)是Java中非常有用的机制,在Java运行时,RTTI维护类的相关信息. 多态(polymorphism)是基于R ...

  10. (C/C++学习笔记) 二十三. 运行时类型识别

    二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...

随机推荐

  1. 如何跑各种check

    如何进行 Fastcheck? 首先,导入环境变量: export CODE_BASE=/data/openGauss-server export BINARYLIBS=/data/openGauss ...

  2. 插入排序的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:将数列分为已排序和未排序,将未排序中的元素插入到已排序中的合适位置 特性 复杂度分析 时间复杂度: 最好情况 ...

  3. ArkUI新能力,助力应用开发更便捷

    原文链接:https://mp.weixin.qq.com/s/TAuq1WC6435ebn6L61rZAA,点击链接查看更多技术内容:    ArkUI是一套构建分布式应用的声明式UI开发框架.它具 ...

  4. centos 6.4下fdisk分区、格式化、挂载新硬盘

    centos 6.4下fdisk分区.格式化.挂载新硬盘 作者: cat 日期: 2013 年 9 月 10 日 发表评论 (0) 查看评论 1.# fdisk -l 查看当前磁盘信息,就会发现最下面 ...

  5. tensorflow安装-【老鱼学tensorflow2】

    tensorflow版本已经升级到了2.x,其在易用性上大大增强,主要是由于API采用了keras的方式,大大简化了开发工作. 安装 pip3 install tensorflow 验证 输入如下代码 ...

  6. Beetl 源码解析:GroupTemplate 类

    本文首发于公众号:腐烂的橘子 前言 Beetl 是一款 Java 模板引擎,在公司的项目中大量运用,它的作用是写通用代码时,有一些差异化的逻辑需要处理,这时可以把这些差异化的逻辑写在模板里,程序直接调 ...

  7. 大屏小程序探索实践 | Cube 技术解读

    简介: 支付宝客户端有极强的动态化诉求,不论 iOS 还是 Android 平台,重新分发软件包从时间上,效率上难以满足产品运营的要求,因此客户端动态化技术应运而生. Cube 起源于 Native ...

  8. 关于Kubernetes规划的灵魂n问

    Kubernetes已经成为企业新一代云IT架构的重要基础设施,但是在企业部署和运维Kubernetes集群的过程中,依然充满了复杂性和困扰.阿里云容器服务自从2015年上线后,一路伴随客户和社区的成 ...

  9. 技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量

    简介: 弱网拉包无障碍,深度提升用户体验 传统的小程序技术容易受到网络环境影响,当网络质量不佳时可能导致拉取不到小程序包的情况.通过预置小程序,即可规避该问题.本文介绍了预置小程序的原理和预置小程序的 ...

  10. 深入解析 Dubbo 3.0 服务端暴露全流程

    ​简介: 随着云原生时代的到来,Dubbo 3.0 的一个很重要的目标就是全面拥抱云原生.正因如此,Dubbo 3.0 为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制. ...