是否可以在不使用指针的情况下在任何std c ++容器中维护派生类的知识,从而动态地从容器中转换返回值?我知道我可以创建向量或某些基类类型的指针,并保留它们的子类。但是问题是我必须使用指针吗?
例子:
struct A {
int x = 0, y = 0, z = 0;
virtual void foo() { cout << "A" << endl; };
};
struct B : public A {
int a = 1, b = 1, c = 1;
virtual void foo() { cout << "B" << endl; };
};
int main() {
<SOMECONTAINER><A> a(2);
a[0] = A();
a[1] = B();
B * p;
B& n = dynamic_cast<B&>(a[1]); // Always throws?
p = dynamic_cast<B*>(&a[1]); // Always zero?
cout << p << endl;
}
是的,您必须使用指针。否则,尝试将aB
放入切片A
结果的容器中:将gets切成一个(这不限于容器,如果您这样做或将a传递给期望a的函数,则会发生完全相同的事情)。B
A
A a = B()
B
A
当您稍后将其取出时,它A
绝对是一个完全不知道的东西,它的血统包括一个杰出的类型的祖先B
-并且无论您以何种方式看待它A
,您都无法将其设为a B
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句