c++ - 容器和派生类

标签 c++ class containers derived

我正在制作一个非常简单的游戏,其中对象(元素 A 或 B)在屏幕上飞来飞去,发生碰撞等。

A 和 B 之间的唯一区别是对象的颜色(A = 黑色 B = 白色)。

是否有可能有一个元素容器容器(或 20 个元素)来容纳 10 个 A 和 10 个 B。我环顾四周,如果我有一个 A 型或 B 型但不是混合型的 Vector,我就可以做到。

任何帮助将不胜感激!谢谢 - 迟来的复活节快乐

KJ<​​/p>

编辑: A 和 B 都具有许多不同的特征,例如它们可以移动的速度不同,以及不同的能力。例如,A 可以发射激光,但 B 不能。这就是为什么我使用不同的类。

最佳答案

C++ 容器是同类的,这意味着您不能在其中存储不同类型的对象。但是,您可以存储指向基类型的指针并使用两个派生的 AB 类。

但是在你的情况下,如果唯一的区别是颜色,我看不出有不同类别的理由。只在类上有一个颜色属性。

如果您需要不同的类,您可以使用如下所示的基类:

class Base
{
public:
// base properties both classes share
// virtual methods etc.
};

class A : public Base
{
public:
 // class A specific methods/properties
};

class B : public Base
{
public:
 // class B specific methods/properties
};

现在您可以拥有一个 Base 对象指针 vector ,它们可以是 AB 类型。

std::vector<Base*> objects;

A *a = new A();
B *b = new B();
objects.push_back(a);
objects.push_back(b);

关于c++ - 容器和派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15764960/

相关文章:

C++11线程修改std::list

C++:具有相同名称的文件范围常量是否违反了一个定义规则?

c++ - 动态规划 : coin change

python - 错误说明 - 'statInter' 对象没有属性 'tk'

c++ - 无法从 'initializer-list' 转换为 UserController

ios - 在 swift 2 中同时将数据从collectioview转接到两个容器

c++ - 为什么 C++ 编译器不优化读取和写入结构数据成员而不是不同的局部变量?

python - 访问元组中值的有效方法(python)

postgresql - 使用命令初始化PostgreSQL容器

windows - 与 Windows 容器汇合