#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

const string ITEM[] = { "薬草", "毒消し", "松明", "寝袋", "鍵" };
const int IMAX = sizeof(ITEM) / sizeof(ITEM[0]); // アイテムの種類

class GameCharacter {
    int* itm; // アイテムを扱うポインタ
public:
    GameCharacter() { // コンストラクタ
        itm = new int[10]; // メモリを動的に確保
        cout << "コンストラクタを実行" << endl;
    }

    // コピーコンストラクタ
    GameCharacter(const GameCharacter& other) {
        itm = new int[10]; // メモリを動的に確保
        for (int i = 0; i < 10; i++) itm[i] = other.itm[i];
        cout << "コピーコンストラクタを実行" << endl;
    }

    // 代入演算子のオーバーロード
    GameCharacter& operator=(const GameCharacter& other) {
        if (this != &other) {
            delete[] itm; // メモリを解放
            itm = new int[10];
            for (int i = 0; i < 10; i++) itm[i] = other.itm[i];
        }
        cout << "代入演算子を実行" << endl;
        return *this;
    }

    ~GameCharacter() { // デストラクタ
        delete[] itm; // メモリを解放
        cout << "デストラクタを実行" << endl;
    }

    void setItem() { // アイテムをセットするメンバ関数
        for (int i = 0; i < 10; i++) itm[i] = rand() % IMAX;
    }

    void itemList() { // アイテム一覧を出力するメンバ関数
        for (int i = 0; i < 10; i++) cout << ITEM[itm[i]] << ",";
        cout << endl;
    }
};

int main() {
    GameCharacter player1;
    player1.setItem();
    cout << "player1の所持品 : ";
    player1.itemList();
    GameCharacter player2;
    player2 = player1;
    cout << "player2の所持品 : ";
    player2.itemList();
}