プログラミングの基礎(擬似言語のトレース)
クラス Counter は、インスタンスごとに整数型のメンバ変数 count(生成時は0)を持ち、メソッド inc() は自分の count に1を加える。Counter 型の変数には、インスタンスそのものではなく、インスタンスへの参照が入る。次のプログラムを実行した後の x の値はどれか。
Counter: c1 ← new Counter()
Counter: c2 ← c1
c1.inc()
c2.inc()
c2 ← new Counter()
c2.inc()
整数型: x ← c1.count × 10 + c2.count
- A11
- B21
- C33
答えと解説を見る
正解:B. 21
c2 ← c1 では参照だけが写され、c1 と c2 は同じインスタンスを指します。そのため c1.inc() と c2.inc() はどちらも同じ count を増やし、c1.count は2になります。次の c2 ← new Counter() で c2 は新しいインスタンスを指すようになり、続く c2.inc() は新しい方の count だけを1にします。x = 2 × 10 + 1 = 21 です。
- A. c2 ← c1 でインスタンスが複製されると考えた場合の値です。実際には同じインスタンスを指します。
- B. 正しい。c1.count = 2、新しいインスタンスの c2.count = 1 です。
- C. c2 ← new Counter() の後も c2 が c1 と同じインスタンスを指すと考えた場合の値です。