C++ 类循环引用,前置声明

代码如下:

#include<iostream>
#include<memory>
struct Food
{

};
class Animal
{
public:
    Animal(int HP, int power) :m_HP(HP), m_power(power) {}
    virtual void eatFood(std::shared_ptr<Food> food);
    virtual void attack(std::shared_ptr<Animal> animal);
    int getHP() const
    {
        return m_HP;
    }
    int getPower()const
    {
        return m_power;
    }
protected:
    int m_HP;
    int m_power;
};

class People;
class Pet :public Animal
{
public:
    Pet(int HP, int power) :Animal(HP, power) {};
    virtual void eatFood(std::shared_ptr<Food> food);
    virtual void attack(std::shared_ptr<Animal> animal);
    void addPeopleHP(People* people);
};

class People :public Animal
{
public:
    People(int HP, int power) :Animal(HP, power) {};
    virtual void eatFood(std::shared_ptr<Food> food);
    virtual void attack(std::shared_ptr<Animal> animal);
    void addHP()
    {
        if (petPtr == nullptr)
        {
            return;
        }
        petPtr->addPeopleHP(this);
    }
private:
    void setHP(int HP)
    {
        m_HP = HP;
    }
private:
    std::shared_ptr<Pet> petPtr;//Pet设计为指针,当people的对象进行拷贝或者移动可以减少消耗,并且不需要直接计算
};

int main()
{
    return 0;
}

其中addPeopleHP的方法不能在头文件声明里直接实现,要在cpp里,引用people.hpp然后再实现

全部评论

相关推荐

牛至超人:我将凌晨两点给你打电话
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务