使用 dynamic_cast 指向其他派生类对象

using dynamic_cast to point to other derived class object

本文关键字:其他 派生 对象 dynamic cast 使用      更新时间:2023-10-16

我有以下情况。有两个基类:Base1,Base2和两个派生类:派生,sysCommandExecutor,派生如下:

#include <iostream>
using namespace std;
class Base1 { virtual void dummy() {} };
class Base2 { virtual void dumy() {} };
class Derived: virtual public Base1, public Base2
{ int a; };
class sysCommandExecutor : public Base2
{
public:
int b;
Base1 *ptr;
void func(void);
};
void sysCommandExecutor::func(void)
{
  Derived *d;
  d = dynamic_cast<Derived *>(ptr);
  if (d == NULL)
  std::cout << "This is NULL" << std::endl;
  else
  {
  // Call a function of Derived class
  }
}
int main () {
   try {
   sysCommandExecutor * sys =  new sysCommandExecutor;
   sys->func();
   return 0;
   }
}                                         

我想在 func 中调用"派生"类的这个函数,但dynamic_cast失败了。我无法在 sysCommandExecutor 类中创建函数,因为那是别人的代码。如何使 sysCommandExecutor 类中的 ptr 指针指向派生类对象?

提前致谢

您正在引用未初始化的指针ptr

如果我将主要更改为:

int main () {
   sysCommandExecutor * sys =  new sysCommandExecutor;
   sys->ptr=new Derived;
   sys->func();
   delete dynamic_cast<Derived *>(sys->ptr);
   delete sys;
   return 0;
} 

它有效

您也缺少虚拟 DTOR