質問: s->pop(); cout << "ポップしたデータは" << x << "です。\n"; } catch (const ListStack::Empty&) { cout << "\aスタックは空です。\n"; } break; default: cout << "1/2/0/のいずれかの数字を入力してください\n"; } } delete s; _getch(); return 0; } ```
回答: 1. コードに書いてあるとおりの意味です。`ListStack` が `Node` の非公開メンバ `data` と `next` にアクセスできます。それら以外のクラスが`data`と`next`を書き換えたりすると整合性が取れなくなるので、非公開としているのでしょう。 (ただし、この場合`Node`自体が`ListStack`以外から見えないので、`data`と`next`は`public`にしてもさほど変わりません。) 2. `push()`の引数になっている`x`は、いつデストラクトされるか`ListStack`クラスは知ることができません。ですので、`x`のアドレスを保持することはできず、自分で保持するためにはコピーする必要があります。`Node::data`がポインタなので`new`してますが、`Type`がコピー可能という前提であれば、`Node::data`をポインタではなく実体にして、ここでは`new Node(x, ptr)`としてコピーするのも手です。 3. はい