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. Qt6安装

    *:Qt现在基本都是在线安装了,但是下载的速度特别慢,所以此次记录下如何提速,快速安装 一.在线安装器下载 我用的这个(非官网):https://mirrors.tuna.tsinghua.edu.c ...

  2. Spring Boot 版本 GA、RC、beta等含义

    GA General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本. RELEASE 正式发布版,官方推荐使用的版本,有的用GA来表示.比如s ...

  3. 重走py 之路 ——普通操作与函数(三)

    前言 本节主要介绍函数,但是函数是由操作组成的.那么就分为两部,一部分为操作一部分为函数. 正文 py世界中的操作. 操作 if: 在学习任何一门语言中,关系if,要关系另外一件事,那就是if是否只能 ...

  4. c# seo 百度sitemap书写

    前言 我们知道对页面百度收录,有两种方式: 1.百度自己抓取. 2.自己提交sitemap让百度来抓取. sitemap 一般的一个业务逻辑是: 生成sitemap xml,然后每隔一段时间更新即可, ...

  5. Triton部署mmdeploy导出的TensorRT模型失败篇

    记录一下历程,最终没有部署成功,应该是Ubantu系统版本的问题.现在没有时间搞了,先记录一下,后续用到再填坑. Triton demo git clone -b r22.06 https://git ...

  6. 剑指offer21(Java)-调整数组顺序使奇数位于偶数前面(简单)

    题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分. 示例: 输入:nums = [1,2,3,4]输出:[1,3,2,4] 注:[ ...

  7. OceanBase初体验之查看OceanBase的执行计划

    前置条件 包含obd和obclient的中控机 OceanBase 测试集群 独立的测试租户 BenchmarkSQL 工具(可选) 为了能够方面的查看复杂SQL的执行计划,我们先用TPCC模拟一些数 ...

  8. 阿里云拨测:主动探测Web应用质量,助力提升用户体验

    简介: 阿里云拨测是一种针对互联网应用(Web页面.网络链路等)进行应用性能和用户体验监测的服务,无需嵌码即可为云上用户提供开箱即用的企业级主动拨测式应用监测解决方案. 随着中国数字化经济的蓬勃发展, ...

  9. 巧用友盟+U-APM 实现移动端性能优化—启动速度

    ​简介: 移动端性能对用户体验.留存有着至关重要的影响,作为开发者是不是被这样吐槽过,"这个 APP 怎么这么大?"."怎么一直在 APP 封面图转悠,点不进去" ...

  10. [ELK] Elastic Stack 的安全性预览

    注:ELK Stack 之后的版本都叫做 Elastic Stack,增加了 Beats 等组件. 安全性保护方式: 阻止未授权的访问,通过 密码认证保护.RBAC授权.IP 过滤. 保证数据完整性, ...