2012-04-29 147 views
0

在我的代碼我也有東西喜歡:投射對象

class A 
{ 
enum eType 
{ 
    A=0, 
    B, 
    C 
}; 
virtual eType ReturnType() 
{ 
    return A; 
} 
}; 

class B : A 
{ 
eType ReturnType() 
{ 
    return B; 
} 
} 

class C : A 
{ 
eType ReturnType() 
{ 
    return C; 
} 
} 

,我有我的MFC欄列表許多物體B和C類。我如何寫這樣的方法

auto GetObjectFromList 
{ 
return object; 
} 

哪些返回適當的對象。我的意思是當列表中的對象是B類的時候,這個方法應該返回對象類B和B類中的方法,並且當它是對象類C時,這個方法應該返回對象類C和類C的方法?我嘗試用C++ 11自動運行,但我無法做到這一點。

+0

爲什麼不返回(指針可能)A足夠? – Mat 2012-04-29 11:11:03

+0

你能舉一個你想如何使用這個函數的例子嗎? – juanchopanza 2012-04-29 11:35:58

回答

1

我想你的意思是「B類:公共A」吧?

std::auto_ptr<A> GetObjectFromList() 
{ 
    return std::auto_ptr<A>(new B) ; // you can new C if you want to return a C 
} 
+1

由於OP似乎在使用C++ 11,並且'auto_ptr'已被廢棄,所以最好使用'unique_ptr'。 – juanchopanza 2012-04-29 11:19:36

+0

非常感謝。那是我需要的 – norbi123 2012-04-29 11:21:28

0

首先,說你有B和C的集合,如果你將不具有類的一個實例,使其純虛由

虛擬ETYPE返回類型()= 0;

其次,你需要做的繼承:

A類:公共

那麼對於這個問題,你需要的dynamic_cast <用>,看看哪個實例存儲在您正在尋找的索引。