如何识别数组或矩阵中的元素并正确使用它们?c++



首先,我有一个抽象父类:

class Abstract_class {
virtual void Method1() {
std::cout<<"Method1 of abstract class!n";
}
};

我还有一个子类

class Child1: public Abstract_class {
void Method1() override {
std::cout<<"Method1 of child1 class!n";
}
};
class Child2: public Abstract_class {
void Method1() override {
std::cout<<"Method1 of child2 class!n";
}
};

My main function

int main(){
Abstract_class ** arr = new Abstract_class * [10];
for(int i=0; i<10; i++) {
for(int j=0; j<10; j++) {
Abstract_class * obj;
// pseudo random rules for fill array
if (i%2 == 0) {
arr[i] = new Child1();
}
else {
arr[i] = new Child2();
}
}
}
}

现在,假设我对这个数组执行一些操作,引用元素,我需要知道哪个元素,对象的位置,这样就不会出现我期望Method1像在child1中那样执行的情况,但我得到了child2方法的完全不同的实现。当然,您总是可以向类中添加字段来标识对象,但我希望能够根据OOP

的规则创建一些优雅的对象。UPD1:

所以,我意识到这种处理多态对象的方式是错误的。但假设我们有一个特定的场地,上面有不同的对象(箱子、敌人、玩家),如果它们的类型不同,它们怎么可能在同一个场地上呢?我如何与他们互动?

您可以使用动态强制转换:

Abstract_class *someObj = ...;
if(Child1 *c1 = dynamic_cast<Child1>(someObj)) {
c1->specificChild1Func();
}
然而,你不应该需要这样的东西。多态性的意义在于,您可以不知道底层类型是什么,但仍然可以使用它们。事实上,你正在寻找这可能是一个信号,你需要在你的设计工作。