c++ - 在包含不同子类的 vector 中的某些对象上调用函数

标签 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() {}
}

现在我想做的是有一个像这样的循环:

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

问题是并不是这个 vector 中的所有元素都有 tick() 方法,但我仍然希望将它们放在同一个 vector 中,因为我也希望能够遍历 vector 并在所有元素上调用 draw()。有办法解决这个问题吗?我正在考虑使用另一个 vector ,但我不想这样做。

最佳答案

如果您有一个 vector 小部件,但只有其中一些小部件带有标志符号,它们真的都是小部件吗?

在您的情况下,您有一个 vector 不同的事物。这是你的问题。当然,您可以想出一些古怪、复杂的机制,将战舰放入铅笔杯中。或者你可以做我认为是正确的事情之一:

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

正如您已经提到的,上面的第 2 条是创建一个单独的 vector 。数字 1 可能就像在基类上提供一个带有空(平凡)实现的 virtual tick() 方法一样简单。

关于c++ - 在包含不同子类的 vector 中的某些对象上调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13821523/

相关文章:

c++ - 如何从 Derived 中的 Base 实例调用 Base 中 protected 成员函数?

c++ - 为什么类型推导对我的集合交集和集合差异调用不起作用?

c++ - 反转类型删除,即之后取回类型

java - 如何在android中搜索字符串数组?

oop - 父类(super class)和父类(super class)的区别以及子类和子类的区别

c++ - 类函数成员不依赖于类成员

c# - 继承问题

c# - 为多个 getter 执行的公共(public)操作

java - 描述用于十进制到二进制转换的此函数

c++ - 在非常复杂的程序中替换系统的最佳方法是什么?