gpt4 book ai didi

c++ - 使用 typeid 在派生类之间进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:07 25 4
gpt4 key购买 nike

我有一个指向用户插入的派生对象的指针 vector (所以我猜正确的术语是“仅在运行时已知”)::

vector<Person *> vect;

派生类是 Male 和 Female。我想对 vector 进行迭代以仅选择 Female 对象并调用它的复制构造函数。我想到了 3 个解决方案:

  1. 使用旗帜;
  2. 使用typeid
  3. 在 Female 的默认构造函数中插入对复制构造函数的调用,以便每次用户创建一个时,自动创建双胞胎。

对于许多类型的派生类,我不喜欢第一个选项。我也不喜欢第三种选择,因为会导致关系问题(世界了解每个女性,但女性无法了解世界)。所以我应该使用第二个选项:例子

typeid(vect.at(i))==typeid(Female)

这个表达是否正确?是否有另一种方式来概述问题?

最佳答案

MaleFemale 继承自 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
}
}

如果你真的想表演女性的拷贝,这又听起来很奇怪,请将最后一行替换为:

        females.push_back(new Female(*p));   // copy the pointee

关于c++ - 使用 typeid 在派生类之间进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com