在运行时 C++ 中使用派生类

     2023-02-21     174

关键词:

【中文标题】在运行时 C++ 中使用派生类【英文标题】:using derived class in runtime c++ 【发布时间】:2015-04-26 00:44:18 【问题描述】:

如果 mybase 类是派生类,这是在运行时检查。我需要在运行时使用 myBase(如 myBase.member1)从 myDerived.member1 调用成员变量。这里 myBase 是一个指针。如何做到这一点。

if(dynamic_cast<myDerived*>(myBase))

【问题讨论】:

dynamic_cast&lt;&gt; 不返回 bool。它要么抛出异常,要么返回 myDerived * 指针。 dynamic_cast&lt;myDerived*&gt;(myBase)-&gt;member1? @Carlton 是的,它有效,谢谢! @Carlton dynamic_cast 与引用 (dynamic_cast&lt;Derived&amp;&gt;(base)) 一起使用时会在失败时抛出 bad_cast 异常,这可能是 @user2225104 所引用的。 @JamesAdkison 哎呀,我什至没有考虑非指针类型。评论已删除。 【参考方案1】:

我会这样做:

myDerived* p_derived = nullptr;
p_derived = dynamic_cast<myDerived*>(myBase);
if (p_derived != nullptr)
   //do something with p_derived->member1;

这样,您只需向dynamic_cast 打一次(可能很昂贵)电话。

【讨论】:

在 C++ 中处理类?

...柄使用它的指针来执行这些操作,所以虚拟成员的行为在运行时会根 查看详情

C++派生类调用函数

...我该如何事先声明?我的派生类是百科全书,但是当我想运行void时,我键入voidEncyclopedia::NameofVoid(),但随后出现错误。我已经尝试了很多东西的组合,但似乎都没有奏效。voidBook::Encyclopedia: 查看详情

在运行时从 MFC 中的派生类中添加控件

】在运行时从MFC中的派生类中添加控件【英文标题】:AddingcontrolsatruntimeinfromderivedclassinMFC【发布时间】:2013-06-1305:27:07【问题描述】:我有两节课。DialogBase类继承自CDialogDialogDerived类继承自DialogBase。BOOLDialodDervied::OnInitDialog()CDia... 查看详情

在 C++ 中的派生类之间共享公共代码

】在C++中的派生类之间共享公共代码【英文标题】:SharingcommoncodebetweenderivedclassesinC++【发布时间】:2020-11-3014:56:40【问题描述】:在下面的示例中尝试在派生类之间共享公共代码时遇到问题:classBaseWritepublic:virtualvoidsetup();classWr... 查看详情

派生类的 C++ 查找表

...通过一个公共基类的引用向量来保存一堆派生类对象。在运行时,子对象是根据用户输入创建的。#include<iostream>#include<vector>#include<memory>#include<type_tr 查看详情

C++ Qt 派生类

】C++Qt派生类【英文标题】:C++QtDerivedClasses【发布时间】:2014-07-1402:04:05【问题描述】:我正在尝试学习Qt和C++,但在理解C++这个关键工作时遇到了一些麻烦。我已经看到了从QMainWindow派生类然后在类成员函数中添加QMenu的示例。... 查看详情

virtual虚函数

...常使用动态调度实现。这一概念是面向对象程序设计中(运行时)多态的重要组成部分。简言之,虚函数可以给出目标函数的定义,但该目标的具体指向在编译期可能无法确定。在面向对象程序设计中,派生类继承自基类。使用... 查看详情

运行时类型识别rtti

1、什么是RTTI?RTTI:Run-TimeTypeIdentification运行时类型识别程序在运行时能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际的派生类。在这里要用到两个C++中的关键字:typeid和dynamic_cast2、typeidtypeid是C++中一个用来... 查看详情

在 C++ 中处理派生类列表的模式

】在C++中处理派生类列表的模式【英文标题】:Patterntohandlelistofderivedclassinc++【发布时间】:2022-01-1802:05:37【问题描述】:我有以下设计问题。我有一些基类&lt;BaseClass&gt;然后我有许多派生类都按层次顺序执行(如果一个返... 查看详情

c++中啥是多态!

...同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。C++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(注意:重载和多态无关)。 参考技术B多态... 查看详情

C++ 静态多态性 (CRTP) 和使用派生类的 typedef

】C++静态多态性(CRTP)和使用派生类的typedef【英文标题】:C++staticpolymorphism(CRTP)andusingtypedefsfromderivedclasses【发布时间】:2011-08-2518:48:59【问题描述】:我阅读了Wikipediaarticle关于在C++中奇怪地重复出现的模板模式,用于执行静态(... 查看详情

在 Boost (C++) 中没有类跟踪的派生类序列化

】在Boost(C++)中没有类跟踪的派生类序列化【英文标题】:DerivedclassserializationwithoutclasstrackinginBoost(C++)【发布时间】:2013-03-1421:24:42【问题描述】:在通过基类指针序列化派生类时,boost序列化存在一些问题。我需要一个系统来序... 查看详情

使用 extern "C" 时 C++ 代码中的函数重载

..."【发布时间】:2020-10-0110:48:33【问题描述】:我想在运行时加载库。我有一个基类“Base”和两个派生类“Derived1”和“Derived2”,它们应该在运行时加载。我正在使用来自thisanswer的方法,并进行了一些 查看详情

如何在 C++ 中访问派生类中的变量?

】如何在C++中访问派生类中的变量?【英文标题】:Howtoaccessavariableinthederivedclassinc++?【发布时间】:2015-07-2017:14:07【问题描述】:我有几个不同类数据类型的向量,我正在尝试打印派生类变量。这是类的示意图我已经实现了图... 查看详情

C++ - 在派生类中静态初始化基类受保护的成员变量

...9-04-0312:30:50【问题描述】:我们正在尝试在我们的项目中使用有界primitivetypes,我们可以在其中检查派生类的实例是否具有有效范围内的数据值(min和max成员变量,在基础class中受保护 查看详情

c++中的虚函数有啥作用?

...态性又称编译时多态性;虚函数属于动态多态性,在程序运行过程中才动态地确定所调用的是那个对象的函数,其过程称为动态关联或滞后关联,动态多态性又称运行时多态性。 查看详情

C++如何使用派生类构造函数销毁基类中的对象

】C++如何使用派生类构造函数销毁基类中的对象【英文标题】:C++howtodestroyanobjectinthebaseclasswithaderivedclassconstructor【发布时间】:2015-06-1322:03:02【问题描述】:所以在我的程序中,我有一个名为hangman的派生类和一个名为HangmanGraph... 查看详情

C++,如何在派生类中调用基类的重载提取运算符?

...icle的基类,它有以下成员:intfuelAmt和intfuelUsage)(我正在使用命名 查看详情