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

Posted

技术标签:

【中文标题】在运行时 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++如何使用派生类构造函数销毁基类中的对象

派生类的 C++ 查找表

C++ 容器与继承

C++ Qt 派生类

C++创建派生类对象时,调用构造函数顺序

关于C++基类与派生类