В коде есть два класса: Player и Винтовка. Объект Player имеет очки здоровья, некоторый уровень навыков и винтовку. Объект «Винтовка» имеет базовый урон по врагам, а также базовый урон, нанесенный отдачей. Объект Rifle также содержит указатель на объект Player, которому он принадлежит. Код:
Код: Выделить всё
// example.cpp
#include
struct Player;
struct Rifle {
Rifle(Player *p) : player{p} {}
int shoot();
int damage{8};
int recoil{1};
Player *player{};
};
struct Player {
Player(const int hp, const int s) : health_points{hp}, skill{s} {}
int shoot();
Rifle rifle{this};
int health_points{};
int skill{};
bool dead{false};
};
int Rifle::shoot() {
if (player->skill < 5) {
player->health_points -= recoil;
}
return player->skill * damage;
}
int Player::shoot() {
int damage{rifle.shoot()};
if (health_points < 1) {
dead = true;
}
return damage;
}
int main() {
Player player{100, 3};
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79084706/this-passed-to-member[/url]
Мобильная версия