首页 > 解决方案 > 将子对象存储在父对象中

问题描述

我正在处理一个 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);
}

标签: c++

解决方案


我需要在主函数中使用什么来将子类存储在父类中?

这是不可能的。您会看到,子类在其中包含其父级的实例。因此,如果子项包含父项的一个实例,该父项的一个实例包含一个子项的一个实例,该子项的一个实例包含一个子项的一个实例,该子项的一个实例包含......你能在这里看到问题吗?

解释该问题的另一种方法是“包含”某些东西(作为成员)需要在定义容器之前定义该东西。因此,父母需要在自己之前定义孩子,而孩子需要在自己之前定义父母。没有办法对定义进行排序以满足这两个要求。

这样的事情可以通过间接实现:父类可以间接引用或指向子类的实例。指向不需要指向类型的定义。


推荐阅读