ページ 11

自作クラスをSTLのリストで管理

Posted: 2016年11月20日(日) 22:57
by Iseuma14
現在自分が作っているプログラムで、
10秒ごとに画面内のどこか(乱数で指定)にランダムな大きさ(乱数で指定)の円が表示されどんどん増えていくという部分を作っています

円に関する情報を自作のクラスを作ってまとめており、それをSTLのリストを使って管理しようと考えています

しかし、コンストラクタが呼ばれた後でデバッガーを使ってメンバ変数の中身を見てみるとなぜかx座標にあたる値があちこちに代入されてしまっています
おかしな点を教えてください

以下コードの関係しそうな部分を載せます

コード:

#include"pch.h"
#include<cmath>
#include<list>
using namespace std;

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
	ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen(DX_SCREEN_BACK);
        list<Object> object;
	object.push_back(Object());
}

//クラス
#include<list>
class Mouse;

class Object
{
private:
	int m_x,m_y;
	int m_r;
	double m_ex;
	int m_alpha;
	double m_angle;
	bool m_flag,m_click;

public:
	Object() : m_ex(1.0),m_alpha(255),m_angle(0.0)
	{
		m_x = GetRand(640);
		m_y = GetRand(480);
		m_r = GetRand(100);
		m_flag = true;
		m_click = false;
	}

	Object(const Object& other)
	{
		m_x = other.m_x;
		m_y = other.m_x;
		m_ex = other.m_x;
		m_alpha = other.m_x;
		m_angle = other.m_x;
		m_flag = true;
		m_click = false;
	}

	Object& operator=(const Object& other)
	{
		m_x = other.m_x;
		m_y = other.m_x;
		m_ex = other.m_x;
		m_alpha = other.m_x;
		m_angle = other.m_x;
		m_flag = true;
		m_click = false;
	}
};

よろしくお願いします

Re: 自作クラスをSTLのリストで管理

Posted: 2016年11月20日(日) 23:02
by みけCAT
Iseuma14 さんが書きました:x座標にあたる値があちこちに代入されてしまっています
そりゃあ、コピーコンストラクタでも代入演算子でも自分でm_xをあちこちに代入しているのでそうなりますよね…。

Re: 自作クラスをSTLのリストで管理

Posted: 2016年11月20日(日) 23:11
by Iseuma14
みけCAT様いつもご回答ありがとうございます

コピーペーストの恐ろしさを体感しました
お恥ずかしい限りです…