C++是否有现有的方法来检查对象是否是派生类型的对象?

use*_*020 3 c++ dynamic-cast

C++是否有现有的方法来检查对象是否是派生类型的对象?例如,

class A
{};

class B : public A
{};

A* p;
Run Code Online (Sandbox Code Playgroud)

并检查是否p指向B.

T.C*_*.C. 10

如果类是多态的(即,至少有一个虚拟成员函数),则可以使用dynamic_casttypeid.

否则,没有.跟踪对象的动态类型会产生成本,并且该语言旨在避免对不需要它的代码进行悲观化.


R S*_*ahu 5

并检查是否p指向B.

dynamic_cast如果virtual类中至少有一个成员函数,则可以使用它.制作析构函数是很常见的virtual.

class A
{
   virtual ~A() {}
};
Run Code Online (Sandbox Code Playgroud)

然后,

B* bPtr = dynamic_cast<B*>(p);
if ( bPtr )
{
   // Use the pointer
}
Run Code Online (Sandbox Code Playgroud)