首页 > 解决方案 > 多种类型的数组

问题描述

所以我目前正在这里做一个小暑期项目——一个基于文本的角色扮演游戏(我知道——多么原创!)。无论如何,我遇到了一个问题。我想为我的角色创建一个库存类,其中包含指向不同项目的指针数组。问题是这些物品本身将有许多不同的类别类型(武器、任务、杂项等)。所以我想知道是否有一种方法可以制作一个可以在类型之间切换的指针?还是我的想法完全错误?谢谢。——西蒙·沃德

标签: c++arraysclasspointers

解决方案


如果您的所有项目类都继承自一个共同的祖先(例如一个Item类),您将能够拥有一个Item *. 这也是使用多态性的好时机:

#include <iostream>
#include <vector>

class Item {
public:
  virtual const char *name() const = 0;
  virtual void use() = 0;
};

class Knife : public Item {
public:
  const char *name() const override { return "Knife"; }
  void use() override { std::cout << "Using the knife" << std::endl; }
};

class Laser : public Item {
public:
  const char *name() const override { return "Laser"; }
  void use() override { std::cout << "Using the laser" << std::endl; }
};

int main() {
  std::vector<std::unique_ptr<Item>> v;
  v.emplace_back(std::make_unique<Knife>());
  v.emplace_back(std::make_unique<Laser>());

  for(const std::unique_ptr<Item> &i : v) {
    std::cout << "Name: " << i->name() << std::endl;
    i->use();
  }

  return 0;
}

输出:

$ c++ --std=c++14 m.cpp
Name: Knife
Using the knife
Name: Laser
Using the laser

推荐阅读