c++ - 将子对象存储在父对象中
问题描述
我正在处理一个 C++ 学校项目。我想将子卡对象存储在主函数中的父卡对象中,因为我需要将库(std::vector<card> _library;
)中的卡设置为相同类型。
我需要在主函数中使用什么来将子类存储在父类中?
类和主要功能的定义:
#ifndef CARD_H
#define CARD_H
class player;
class card
{
protected:
std::string _name;
std::string _type;
player _owner;
public:
card();
card(std::string name, std::string type);
void setOwner(player&);
virtual void play();
};
#endif
#ifndef ENCHANTMENT_H
#define ENCHANTMENT_H
class enchantment :public card
{
public:
enchantment()
enchantment(std::string name, std::string type);
void play() override;
};
#ifndef CREATURE_H
#define CREATURE_H
class creature :public card
{
public:
creature();
creature(std::string name, std::string type);
void play()override;
};
#endif
#ifndef PLAYER_H
#define PLAYER_H
class card;
class player
{
protected:
std::string _name;
std::vector<card> _hand;
std::vector<card> _library;
std::vector<card> _in_play;
std::vector<card> _discards;
public:
player();
player(std::string name);
//setter functions
void setLibrary(std::vector<card>);
};
#endif // !PLAYER_H
int main() {
player p1("player1");
creature p1Soldier01("Soldier", "Creature");
creature p1Soldier02("Soldier", "Creature");
enchantment p1Rage01("Rage", "Enchantment");
enchantment p1Rage01("Rage", "Enchantment");
std::vector<card> player1Cards(4);
//this is the part i need help.
p1.setLibrary(player1Cards);
}
解决方案
我需要在主函数中使用什么来将子类存储在父类中?
这是不可能的。您会看到,子类在其中包含其父级的实例。因此,如果子项包含父项的一个实例,该父项的一个实例包含一个子项的一个实例,该子项的一个实例包含一个子项的一个实例,该子项的一个实例包含......你能在这里看到问题吗?
解释该问题的另一种方法是“包含”某些东西(作为成员)需要在定义容器之前定义该东西。因此,父母需要在自己之前定义孩子,而孩子需要在自己之前定义父母。没有办法对定义进行排序以满足这两个要求。
这样的事情可以通过间接实现:父类可以间接引用或指向子类的实例。指向不需要指向类型的定义。
推荐阅读
- javascript - 如何将多个响应合并到一个json中
- python - 根据特定匹配键从另一个更新 JSON 对象
- java - 尝试在模拟的 Eclipse Paho MqttClient 上调用方法时出现 NullPointerException
- android - 更新 OneSignal 依赖项无法解决依赖项错误
- javascript - 如何使用性能观察者 api 查找长任务信息
- javascript - 使用来自 URL 的 json 数据显示 pi 图表
- ssis - 当两个 SSIS 包作业计划同时运行时,其中一个 SSIS 包计划作业失败
- r - 相互叠加的 400 多个线图的 ggplot 颜色
- python - pyodbc - 无法连接到 DSN
- c# - 在运行 HTTPS 的应用程序中以 HTTP 而非 HTTPS 形式发送的重定向 URI