как указать объект без использования его атрибутов - PullRequest
0 голосов
/ 26 апреля 2020

Я изучаю объектно-ориентированное программирование.
Чтобы узнать, какой объект уничтожается, я хочу добавить некоторый код в деструктор класса и использовать для этого атрибут.
Например -

class player{
public:
string name;
int health;

~player(){
cout<<name<<" destroyed";
}
};

В этом примере имя правильно помогает мне идентифицировать объект, который уничтожается.
Но если бы не было таких атрибутов, которые могли бы помочь мне узнать, какой объект был уничтожен, что должно быть сделано.
Есть ли способ напечатать само название объекта. (т.е. если я создаю player enemy;, тогда враг это то, что я хочу сказать по имени)

1 Ответ

1 голос
/ 26 апреля 2020

Если вы хотите, чтобы он был универсальным, вы можете перегрузить operator << вместо того, чтобы фокусироваться исключительно на деструкторе и выводить биты и кусочки атрибутов вашего класса.

Вот пример:

#include <string>
#include <ostream>
#include <iostream>

class player {
    std::string name;
    int health;
public:
    player(const std::string& n, int h) : name(n), health(h) {}
    ~player() { std::cout << "Destroying the following: " << *this << "\n"; }
    friend std::ostream& operator << (std::ostream& os, const player& p);
};

std::ostream& operator << (std::ostream& os, const player& p)
{
    os << p.name << " " << p.health;
    return os;
}

int main()
{
    player p1("Joe", 1);
    player p2("Sam", 2);
    std::cout << p1 << "\n" << p2 << "\n";
}

Вывод:

Joe 1
Sam 2
Destroying the following: Sam 2
Destroying the following: Joe 1

Вы можете следить за тем, что было сделано, посмотрев документацию здесь .

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