Fra*_*con -1 c++ pointers c++11
是否可以在不使用指针的情况下在任何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;
}
Run Code Online (Sandbox Code Playgroud)
是的,您确实必须使用指针。否则,尝试将 aB放入一个容器中会A导致切片:将B被切割成 an A(这不仅限于容器,如果您这样做A a = B()或将 a 传递B给期望 an 的函数,则会发生完全相同的事情A)。
当你后来把它拿出来时,它A完全不知道它的血统包括一个杰出的祖先类型B——不管你怎么看A,你都不能让它成为B.