当前位置: 首页 > 知识库问答 >
问题:

动态铸造规范(规则)澄清

谯德佑
2023-03-14

我们有dynamic_cast的一般形式:

dynamic_cast (表达式)

我特别对这条规则(5a)的粗体部分感到困惑:

5:如果expression是指向多态类型基的指针或引用,而new-type是指向派生类型的指针或引用,则执行运行时检查:

a)检查由表达式指向/标识的最派生对象。如果在该对象中,表达式指向/引用派生的公共基,并且如果仅有一个派生类型的对象从由表达式指向/标识的子对象派生,则转换的结果指向/引用该派生对象。(这称为“向下转换”。)

你能给出一个这个部分不满意的例子吗?

以上摘录来自CPPreference:https://en.cppreference.com/w/cpp/language/dynamic_cast

共有1个答案

颜阳炎
2023-03-14

丰富了多重继承的例子@Peter总结道:

     Base1
       |
     Base2
    /     \
  Left   Right
    \     /
    Derived

Base1* p_base1 = new Derived();
Base2* p_base2 = dynamic_cast<Base2*>(p_base1); // Which Base2?

派生的对象中有两个不同的base2对象,那么p_base2应该指向哪一个?

 类似资料:
  • 规则 Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则: 通过 API 直接修改 (loadRules) 通过 DataSource 适配不同数据源修改 手动通过 API 修改比较直观,可以通过以下几个 API 修改不同的规则: FlowRuleManager.loadRules(List<FlowRule>

  • 有没有一种方法可以通过使用集合名称变量来概括它

  • 上面是一段代码,它以某种形式出现在我即将进行的一次考试的过去试卷中。这个问题的想法是衡量你是否完全理解多态性,动态和静态铸造。面向对象的基本思想。 我想把我认为正确的东西拿出来,如果人们能纠正我或补充一点,我将不胜感激。 我看不出任何与上面代码相关的其他观点。

  • 问题内容: 我正在考虑减少使用。js(看起来不错),但我们的网站要求在初始页面加载后动态加载某些样式。但是,似乎所有LESS样式表必须在less.js脚本加载之前先加载。即这有效 但是如果换行,它将失败,除非正确订购,否则Firefox和chrome都不会尝试加载“style.less”。在本教程中明确指出了订购要求。 有什么方法可以在初始页面加载后加载更少的样式表? - 保存您的LESS代码时,

  • 任何编程中的范围都是程序的一个区域,其中定义的变量可以存在,并且超出该变量,无法访问它。 有三个地方可以用C编程语言声明变量 - 在函数或块内部,称为local变量。 在所有函数之外,称为global变量。 在函数参数的定义中称为formal参数。 让我们了解什么是local和global变量,以及formal参数。 局部变量 (Local Variables) 在函数或块内声明的变量称为局部变量

  • 我是规则引擎新手,我的应用程序需要从文件系统动态加载xml文件中的规则,因为管理员可以在运行时创建规则。(Java) 我的问题是:有没有可能流口水?如果是,那么请分享知识,如果不是,那么还有其他选择吗?