通过在C++中使用指针,在几个具有多态性的实例上应用超类方法



我有一个超类Athlete,它提供了一个虚拟的void work((方法,该方法在子类Climber中重新定义。由于多态性,我想从类Athlete和Climber中创建大量实例,并将work((方法应用于它们,只需几行。多亏了我的搜索,我知道有指针是可能的,但我不知道如何。。。

我知道如何使用指针来在这些实例上应用work((方法,但前提是我要一个接一个地这样做:

class Athlete {
.....
virtual void work {
cout << getName() << " is training very hard." << endl;
}
};
class Climber: public Athlete{
......
void work(){
cout << getName() << " is climbing very hard." << endl;
}
.....
};

Athlete athlete1 = Athlete(...);
Climber climber1 = Climber(...);
....
Athlete* a1 = &athlete1;
Athlete* a2 = &climber1;
....
a1->work();
a2->work();     
....

但我不知道如何使用for循环来自动为成千上万的实例执行此操作。有人能帮我做那个吗?

提前谢谢。

对于那些对具体解决方案感兴趣并来到本页的人,这里有一个。

由于我的问题下的评论,我能够改进我对这个主题的搜索,并找到了解决方案。我不知道这是否是解决我问题的完美方案,但至少,它有效。

以下是解决方案:

...
#include <vector>
....
int main(int argc, char* argv[]){
// Create a vector of pointers:
vector<Athlete*> team;
// Call constructors to create instances:
Athlete athlete1 = Athlete(...);
Climber climber1 = Climber(...);
Athlete athlete2 = Athlete(...);
Climber climber2 = Climber(...);
// Fill the vector with pointers on instances:
team = {&athlete1,&athlete2,&climber1,&climber2};
// Apply the work method() on every instances:
for (Athlete * &i : team) 
{
i->work();
}
return 0;
}

也许有人可以给我一些改进的建议,也许还有关于填充"团队;向量,或其他任何东西。

最新更新