c++ - 多种类型的数组
问题描述
所以我目前正在这里做一个小暑期项目——一个基于文本的角色扮演游戏(我知道——多么原创!)。无论如何,我遇到了一个问题。我想为我的角色创建一个库存类,其中包含指向不同项目的指针数组。问题是这些物品本身将有许多不同的类别类型(武器、任务、杂项等)。所以我想知道是否有一种方法可以制作一个可以在类型之间切换的指针?还是我的想法完全错误?谢谢。——西蒙·沃德
解决方案
如果您的所有项目类都继承自一个共同的祖先(例如一个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
推荐阅读
- swift - 将 ARKit 截图保存到 AR 资源组
- c# - 通过 Jenkins 运行单元测试用例时出错:无法加载文件或程序集“Microsoft.QualityTools.Testing.Fakes, Version=11.0.0.0”
- html - 如何在 tr 标记中添加 html div 以跨越整行
- scala - 在 Scala Play-Bootstrap 表单中删除已经上传的文件
- python - 使用带有索引和列的 numpy 数组创建数据框
- r - 使用 groupby 列创建缺少天数的新行
- java - 使用 fiddler 捕获 java 应用程序流量
- python-3.x - 在qutip中实现基于零和sigma的Qobj的简单方法
- python - 没有名为“django”的模块
- ios - 无法保存数据 --- Swift、IOS、Core 数据 --- 线程 1:信号 SIGABRT