簡體   English   中英

使用dynamic_cast指向其他派生類對象

[英]using dynamic_cast to point to other derived class object

我有以下情況。 有兩個基類: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

如果我將main更改為:

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

} 

有用

您也缺少虛擬dtor

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM