2014-06-15 70 views
0

我有一個名爲「obj」的類和另一個名爲「aggregate」的類。類的鑄造(向上)

第二個來自第一個。

類「obj」只包含一個整數。 「聚合」沒有更多(只有更多的「方法」)。

class obj{ 
public: 
    int t; 
} 

我有一個返回「目標文件」

obj pop(); 

的功能,我需要它的結果分配給類「聚集」的變量。

aggregate a; a = pop();

我嘗試做它喜歡:

a=static_cast<aggregate>(pop()); 
a=dynamic_cast<aggregate>(pop()); 

因爲基本上在棧上傳遞結構的值(所以基本上是一個整數),我不明白爲什麼我應該做的:

a=*((aggregate*)(&pop())); 
+0

因爲C++中的多態僅適用於指針和引用,不是嗎? – Gluttton

+1

完成。最小。代表。例。 –

+0

你的意思是我必須添加我的演員定義才能覆蓋該限制?例如:#define value_cast(type,value)*((type *)(&value))。別無退路 ? –

回答

1

要實現多態,你需要使用指針或引用。

#include <stdlib.h> 

class obj 
{ 
    protected: 
     virtual ~obj() {}; 
     int data; 
}; 

class agregate : public obj 
{ 
    public: 
     void actionA() {}; 
     void actionB() {}; 
}; 

obj * pop() 
{ 
    return new agregate; 
} 

int main (int argc, char * argv []) 
{ 
    agregate * a = dynamic_cast <agregate *> (pop()); 

    return EXIT_SUCCESS; 
} 
+0

使用dynamic_cast來上傳指針。 –

+0

@Gustavo Maciel,謝謝你的建議! – Gluttton

+3

@GustavoMaciel這是一個沮喪,不是upcast。你甚至不需要劇組來投射。 – cmaster