• ベストアンサー

オブジェクトのコピー(その2)

http://okweb.jp/kotaeru.php3?q=1472758 の続きですが、このプログラムを実行すると、 100 100 2 のように出力されます。 しかし、私の意図としては、 100 1 2 のように出力させたいのです。 つまり、インスタンスのコピー後、 コピーされた・コピーした両インスタンスが まったく別個のインスタンスとして振舞うようにしたいのです。 このようなことは可能でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

やりたいことを、勘違いしてたら、ごめんなさい。 --------------------------------------------- #include <iostream> #include <cstdio> #include <cassert> using namespace std; class Player { int data; public: Player(){}; ~Player(){}; Player(int d){ data=d;} void SetData(int d){ data = d; } int GetData(){ return data; } //代入演算子 Player & operator=(const Player& x); }; Player& Player::operator = (const Player & x){ Player *p = new Player(x.data); return *p; } class App { Player p[3]; public: App(){}; ~App(){delete [] p;} void SetData(int i1,int i2){ p[i1].SetData(i2); } void copy(){p[0]=p[1];SetData(0,100);} void output(){ for(int i=0;i<3;i++)printf("%d\n",p[i].GetData()); } }; void main(){ App x; for(int i=0;i<3;i++)x.SetData(i,i); x.copy(); x.output(); } ---------- 実行結果: 100 1 2

noname#108554
質問者

お礼

完璧です。お手数おかけいたしました。

関連するQ&A