質問: 0; i < num; i++) { cout << " [" << i << "]: "<
回答: 良い教科書を探して読んでみるのが手っ取り早いっす。まあここ stackoverflow でもいいんですけど、質問文を書いて返事がついて、を待っているより教科書読むほうが手早いはず。 回答1. 逆っす。その書き方したら `this==&a` です。これを踏まえて 提示例 `t=x;` は `C& C::operator = (const C& z)` を `this==&t` かつ `z==x` で呼び出すものです。書くなら `t.operator=(x);` ってわけで。 本文中の質問 Q. 代入演算子の `if (&z != this)` の意味は? 答:ソースコード中 `x=x;` とした場合を検出しています。これはわかりやすすぎる例ですが、実用上はポインタや参照を経由して結果的に「同一オブジェクトへの代入」となった場合を想定しています。 `x=x;` つまり同一オブジェクトへの代入がどうなって欲しいのかは要望次第ですが、まあたいていは「意味的な値が変わらない」ことが要望されると思います。結果的に「何もしない」だけで要望を満たせるので、提示例の代入演算子はそうなっています。 本文中の質問 Q. コピーコンストラクタの `if (&x != this)` の意味は? 答:同様、自分自身をコピーコンストラクトする場合の検出です。尋常の方法では自分自身を自分自身に上書きコピーコンストラクトすることはできません(どうすればできるのかは宿題としておきましょう)どうなってほしいのかも要望次第で違うでしょう。で、提示コードはバグっているというか多分不等号が逆。 質問2. (コンパイルして試していませんが)できるはず。