2012-08-12 25 views
0

我有以下情形。有兩個基本類別:基礎1,和Base2和兩個派生類:衍生sysCommandExecutor其推導如下:使用dynamic_cast指向其他派生類對象

#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指針指向派生類對象?

在此先感謝

+4

什麼是ptr的assinged?在你的代碼中它是一個未初始化的指針 – Gir 2012-08-12 15:24:08

+0

代碼看起來很奇怪。似乎沒有正確使用多態性。你有一個派生類指向同一個實例。 – 2012-08-12 15:28:56

+0

http://codepad.org/f65rqtYq'沒有錯誤或程序輸出。' – Gir 2012-08-12 15:35:23

回答

1

如果我改變主讓你引用一個未初始化的指針ptr

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

} 

它的工作原理

你缺少一個虛擬的析構函數以及

相關問題