#ifndef __COMBINATION_H__ #define __COMBINATION_H__ #include "spdlog/spdlog.h" #include /* 抽象团队类 */ class AbstractTeam { public: AbstractTeam(std::string name) : m_name(name) {}; virtual ~AbstractTeam() {} /* 设置父节点 */ void setParent(AbstractTeam* parent) { m_parent = parent; } AbstractTeam* getParent() { return m_parent; } /* 获取名称 */ std::string getName() { return m_name; } /* 判断是否有子节点 */ virtual bool hasChildren() { return false;} /* 添加子节点 */ virtual void add(AbstractTeam* team) {} /* 移除子节点 */ virtual void remove(AbstractTeam* team) {} /* 战斗和现实团队信息 */ virtual void fight() = 0; virtual void display() = 0; private: std::string m_name; AbstractTeam* m_parent = nullptr; }; /* 叶子节点 */ class LeafTeam : public AbstractTeam { public: using AbstractTeam::AbstractTeam; ~LeafTeam() override {} void fight() override { SPDLOG_INFO("{} + {} 与黑胡子的船员进行近距离肉搏战..."); } void display() override { spdlog::info("Leaf Team: [{}]", getName()); } }; #endif /* __COMBINATION_H__ */