代码如下:
#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然后再实现

京公网安备 11010502036488号