我有一个指向用户插入的派生对象的指针向量(所以我猜正确的术语是"只在运行时知道)::
vector<Person *> vect;
Run Code Online (Sandbox Code Playgroud)
派生类是男性和女性.我想对向量进行迭代,只选择Female对象并调用它的copyconstructor.我想3个解决方案:
在多种派生类的情况下,我不喜欢第一个选项.我也不喜欢第三个选项,因为会导致关系问题(世界知道每个女性,但女性不能知道世界).所以我应该使用第二个选项:示例
typeid(vect.at(i))==typeid(Female)
Run Code Online (Sandbox Code Playgroud)
这个表达是否正确?有没有其他方法来概述问题?
拥有Male并Female继承Person听起来像一个非常奇怪的设计,但在这里我们去:
vector<Person*> vect;
vector<Female*> females;
for (vector<Person*>::const_iterator it = vect.begin(); it != vect.end(); ++it)
{
if (Female* p = dynamic_cast<Female*>(*it))
{
females.push_back(p); // copy the pointer
}
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要执行一个女性的副本,这听起来很奇怪,用以下内容替换最后一行:
females.push_back(new Female(*p)); // copy the pointee
Run Code Online (Sandbox Code Playgroud)