С++ Взаимодействие между class и наследование
На скрине ниже (код я не понял как красиво сюда вставить, кашу выдаёт) мне нужно сделать так, чтобы 2 разных класса могли взаимодействовать друг с другом, например один это враг, а второй это мы как пользователь или игрок (я всё на игры перевожу, так проще) и нужно, чтобы враг наносил урон игроку, а игрок врагу. Сделать формулы не сложно, сложно сделать так, чтобы были взаимодействия между обоими классами.
И мне хотелось бы знать:
я вообще в том направлении иду или надо иначе делать, если так, то будьте добры подкинуть тем для изучения и хоть какой пример без этих надоевших Х и Y, брррр.
Если всё же направление верное, то как мне объявить переменные в главном (мамином) классе, ибо ругается только на него и причина тому - необъявленная переменная health от класса Enemy в классе Player. 2.1. Я знаю что можно сделать переменную health в главном классе, но там чехарда с указателями начинается, если же то, что я делаю в данный момент в принципе не жизнеспособно, то подскажите на моём примере как сделать правильно. P.s. На скрине и код и ошибка ниже в логе.
#include <iostream> using namespace std; class Library { public: class Player &p; class Enemy &e; }; class Player : public Library{ public: int health; Player *p; void test() { p->health = 100; e.health = 123; } }; class Enemy : public Library{ public: int health; Enemy *e; void testEnemy() { e->health = 666; p.health = 123; } };
Ответы (1 шт):
Ну, во-первых, незачем множить "здоровья", во-вторых, родительский класс по хорошему не должен ничего знать о наследниках, и тем паче содержать их (неинициализированные ссылки) в себе, в третьих, нельзя использовать необъявленный класс, в четвертых...
Словом, я бы делал так:
class Character
{
protected:
int health;
public:
Character(int h):health(h){}
int getHealth() const { return health; }
void setHealth(int h) { health = h; }
};
class Enemy;
class Player : public Character
{
public:
Player(int h):Character(h){}
void test(Enemy& e);
};
class Enemy : public Character
{
public:
Enemy(int h):Character(h){}
void testEnemy(Player&p);
};
void Player::test(Enemy& e)
{
health += 100;
e.setHealth(e.getHealth()-123);
}
void Enemy::testEnemy(Player&p)
{
health += 666;
p.setHealth(p.getHealth()-123);
}
