2012-04-29 258 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 <用>,看看哪个实例存储在您正在寻找的索引。