假设我有4个类:A,B,C和D.指向类族内各种类型指针的限制?
A是基类。 B选自A. Ç衍生自A衍生
d是从B.
我有每种类型的对象的矢量的。
我创建了一个从相关类(family?)中排除的第5个类,名为Z. Z包含一个指向类A的对象的变量,称为紫色。
我可以通过如下方式创建“家庭内”通用指针: A * pUniversal;
并且点p通向A,B,C或D可交换到存储在其类型的向量中的对象..然后将Z的变量设置为pUniversal?
假设我有4个类:A,B,C和D.指向类族内各种类型指针的限制?
A是基类。 B选自A. Ç衍生自A衍生
d是从B.
我有每种类型的对象的矢量的。
我创建了一个从相关类(family?)中排除的第5个类,名为Z. Z包含一个指向类A的对象的变量,称为紫色。
我可以通过如下方式创建“家庭内”通用指针: A * pUniversal;
并且点p通向A,B,C或D可交换到存储在其类型的向量中的对象..然后将Z的变量设置为pUniversal?
是的,你可以做到这一点。这是派生类的主要好处之一。
如果您有A
中的功能需要执行B
或C
,请确保它们是虚拟的。
好的很酷。感谢您的确认!是的,我喜欢使用虚拟。 – Habit 2013-04-05 01:58:07
虽然'reinterpret_cast' _can_可用于向下转换,但它不是合适的工具。而且,这个问题不是无论如何都不关心。 – jogojapan 2013-04-05 02:06:13
static_cast <>会更好,但有一点预见,你甚至不需要这个。 – 2013-04-05 03:51:40
一个例子:
#include <iostream>
#include <vector>
class A
{
public:
virtual void SayHi() {
std::cout<<"A says hi"<< std::endl;
}
};
class B : public A
{
public:
virtual void SayHi() {
std::cout<<"B says hi"<<std::endl;
}
};
class C: public A
{
public:
virtual void SayHi() {
std::cout<<"C says hi"<<std::endl;
}
};
typedef std::shared_ptr<A> APtr;
typedef std::vector<APtr> Container;
int main()
{
Container myContainer;
// Store A's instance or any of its derivatives.
myContainer.push_back(APtr(new A));
myContainer.push_back(APtr(new B));
myContainer.push_back(APtr(new C));
for(/*Container::iterator or */ auto pbase = myContainer.begin(); pbase != myContainer.end(); pbase++)
(*pbase)->SayHi();
myContainer.clear();
return 0;
}
你应该根据你所使用的语言标记您的问题,甚至编写一些代码来支持你的问题。 – mpm 2013-04-05 01:39:52
真的吗?这是一个普遍的问题 – Habit 2013-04-05 01:41:19
'A * pUniversal'对我来说并不普遍。 – mpm 2013-04-05 01:42:25