在包含不同子类的向量中的某些对象上调用函数

Top*_*sic 0 c++ oop inheritance vector subclass

我有这样的事情:

class A {
    void add (A* a) {
        //add a to a vector<A*>
    }
    virtual void draw() = 0;
}

class B : public A {
    void tick() {}
    void draw() {}
}

class C : public A {
    void draw() {}
}
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是这样的循环:

for(int i=0; i<vector.size(); i++) {
    vector[i]->tick();
}
Run Code Online (Sandbox Code Playgroud)

问题是,并非此向量中的所有元素都具有该tick()方法,但我仍然希望将它们放在同一个向量中,因为我还希望能够遍历向量并调用draw()所有元素.有什么方法可以解决这个问题吗?我正在考虑使用另一种载体,但我宁愿不这样做.

Joh*_*ing 5

如果你有一个vector小部件,但只有一些小部件有一个dingbat,它们真的是所有的小部件吗?

在你的情况下,你有vector一些不一样的东西.这是你的问题.当然,你可以想出一些hacky,复杂的机制,把一艘战舰放在铅笔杯里.或者你可以做我认为合适的事情之一:

  1. 确保你在铅笔杯中放入的所有东西都是铅笔
  2. 创建其他地方以放置战列舰.

正如您已经提到的,上面的数字2正在创建一个单独的向量.数字1可能virtual tick()与在基类上提供具有空(普通)实现的方法一样简单.