gpt4 book ai didi

c++ - 数组中不同类型的对象并获取每个对象的类型

转载 作者:行者123 更新时间:2023-11-28 04:31:54 25 4
gpt4 key购买 nike

我正在尝试将不同类型的对象添加到数组中,并且我想在转换之前获取派生类的类型。有什么好的解决办法吗?

顺便说一句:这个例子不起作用。检查对象时类型设置不正确。

伪代码:

enum Fruit {
APPLE = 0,
BANANA = 1
}

class Fruit {
public:
int type;
}

class Apple : Fruit {
...
}

class Banana : Fruit {
...
}

Apple *apple = new Apple();
apple->type = APPLE;

vector<Fruit*> fruits;
fruits.push_back(apple);

if(fruits[0].type == BANANA) // type always the same ...
static_cast<Banana*>(fruits[0])

**更新:**

我不明白为什么这行不通。
首先,类型应该传递给子类并且是可访问的。
第二,我明白为什么第一个和最后一个是4,但我不明白为什么第二个元素类型是0??

class PolyTest {
public:
int type;
};

class SubA : public PolyTest{

};

class SubB : public PolyTest{

};

std::unique_ptr<SubA> sub = std::make_unique<SubA>();
sub->type = 66;

std::unique_ptr<SubB> subb = std::make_unique<SubB>();
sub->type = 3;

std::vector<PolyTest*> tests;
tests.push_back(sub.get());
tests.push_back(subb.get());
sub->type = 4;
tests.push_back(sub.get());

std::cout << "subtype: " << tests[0]->type << std::endl;
std::cout << "subtype: " << tests[1]->type << std::endl;
std::cout << "subtype: " << tests[2]->type << std::endl;

返回:

subtype: 4
subtype: 0
subtype: 4

最佳答案

正如其他人指出的那样,您可以使用智能指针来确保正确销毁并将基类指针放在 vector 中。 (请注意,在我的示例中,范围至少需要 C++11)

class Fruit
{
public:
Fruit(int p_type) { type = p_type;};
int getType() { return type; }
protected:
int type;
};

class Banana : public Fruit
{
public:
Banana() :Fruit(1) {};
};

class Apple : public Fruit
{
public:
Apple() :Fruit(2) {};
};



int main(int argc, char* argv[]) {
std::vector<std::shared_ptr<Fruit>> vec;

auto f1 = std::make_shared<Banana>();
auto f2 = std::make_shared<Apple>();

vec.push_back(f1);
vec.push_back(f2);

for (auto f : vec)
{
std::cout << "my Type is : " << f->getType() << std::endl;
}
}

关于c++ - 数组中不同类型的对象并获取每个对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52654271/

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