2011年,3月,编者:李国帅
编程序要小心谨慎,符合规则使用程序。
对象定义
class CDataAttibute:public CObject //通用数据结构
{
public:
CDataAttibute()
{
m_fx=0.0F;
m_fy=0.0F;
m_csTag ="";
m_fValue ="";
m_csClass ="";
}
CDataAttibute(double dx,double dy)
:m_fx(dx),m_fy(dy)
{
}
~CDataAttibute()
{
}
public:
double m_fx;
double m_fy;
CString m_csTag;
CString m_fValue;
CString m_csClass;
CDataAttibute & operator= (CDataAttibute &pDataAttibute) //重载 = 算符
{
if(&pDataAttibute == this)
return *this;
m_fx = pDataAttibute.m_fx;
m_fy = pDataAttibute.m_fy;
m_csTag = pDataAttibute.m_csTag;
m_fValue = pDataAttibute.m_fValue;
m_csClass = pDataAttibute.m_csClass;
return *this;
}
};
对象使用
public:
CObArray aryData;
void CWinDialogDlg::OnBnClickedButton1()
{
CDataAttibute data_attibute;
data_attibute.m_fx = 1;
data_attibute.m_fy = 2;
data_attibute.m_csClass ="World";
data_attibute.m_fValue ="NewCuntry";
data_attibute.m_csTag ="new Area";
aryData.Add(&data_attibute);//把一个临时对象的指针放在公共对象是不对的。
CDataAttibute* pdata_attibute = new CDataAttibute;
*pdata_attibute = data_attibute;
aryData.Add(pdata_attibute);//应该这样做
}
void CWinDialogDlg::OnBnClickedButton4()
{
int nCount = aryData.GetCount();//2
CDataAttibute* pdata_attibute0 = (CDataAttibute*)aryData.GetAt(0);//内存已经被释放
CDataAttibute* pdata_attibute1 = (CDataAttibute*)aryData.GetAt(1);//正常获取。
ASSERT(pdata_attibute0->m_fx == 0);//浮点比较有问题
delete pdata_attibute0;//错误,内存已经释放
delete pdata_attibute1;
aryData.RemoveAt(1);
aryData.RemoveAt(0);
}