gpt4 book ai didi

c++ - 在多态对象的 STL vector 上调用特定于对象的函数

转载 作者:行者123 更新时间:2023-11-30 00:52:42 25 4
gpt4 key购买 nike

所以我有一个类层次结构,它基本上有 Entity 类作为父抽象类和一堆从它派生的其他类,例如 Door播放器地面

我还有一个三维 vector,它存储指向 Entity 类型对象的指针,我用派生的对象填充这个 vector对象。在 Door 类中,我有一个名为 isOpen() 的方法,它只返回一个 bool。此函数特定于 Door 类,既不存在于 Entity 类中,也不存在于它的任何其他派生类中(因为我不需要检查是否,例如, Ground 对象是否打开)。

现在,知道在 vector 位置 ij 处存在一个类型为 Door 的对象,k,我想像这样调用方法 isOpen:vector[i][j][k]->isOpen()。不幸的是,当我这样做时,编译器返回 class Entity has no member named isOpen()。这是可以理解的,因为函数 isOpen()Door 类独有的,但是我该怎么做才能使这种调用成为可能?

最佳答案

解决这个问题的一种方法是向下转换为 Door *第一的。但是,为了使这种向下转换类型安全,您应该使用 dynamic_cast<Door *>() .如果Entity还没有虚方法,可以添加虚析构函数。

class Entity {
//...
virtual ~Entity () {}
};

void foo (Entity *e) {
//...
Door *door = dynamic_cast<Door *>(e);
if (door) {
if (door->isOpen()) {
//...
}
}
//...
}

关于c++ - 在多态对象的 STL vector 上调用特定于对象的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18323075/

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