Преобразовать тип данных a объекта класса (C ++) - PullRequest
0 голосов
/ 05 декабря 2018

Я пишу игру, в которой один Объект может превращаться в объект другого класса (например, Кларк Кент -> Супермен).Я хотел бы знать, как наиболее эффективно реализовать это.

Логика моего текущего кода: я создал функцию turnInto() внутри класса ClarkKent.Функция turnInto вызывает конструктор класса Superman, передавая ему всю необходимую информацию.Следующим шагом является присвоение адреса объекта Superman текущему объекту ClarkKent.

void ClarkKent::turnInto() {
    Superman sMan(getName(), getMaxHP(), getDamage());
    &(*this) = &w; // <- error here
    this->ClarkKent::~ClarkKent();
}

Как вы уже догадались, компилятор выдает ошибку, что выражение не может быть назначено.Не уверен, как найти правильное решение для этого.

1 Ответ

0 голосов
/ 05 декабря 2018

Сохраняйте это простым и не играйте трюки, которые вы не понимаете с вашими объектами.

Superman ClartkKent::turnInto() {
    return {getName(), getMaxHP(), getDamage()};
}

У вызываемого абонента:

ClartkKent some_guy{...};
auto some_other_guy = some_guy.tunInto();

Или, если вам нужно что-то необычное:

using NotBatman = std::variant<ClartkKent, Superman>;
NotBatman some_guy = ClartkKent{...};
using std::swap;
swap(some_guy, some_guy.tunInto());

ИДК

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...