在VC++中怎样在一个类中添加数组? add 什么?

在VC++中怎样在一个类中添加数组? add 什么?,第1张

在类中添加数组?没明白你的意思。。。

而且我记得,数组完成初始化以后,应该不能再添加了吧。

只能从新定义一个数组。。。或者直接使用容器不是更方便么。自身还定义了迭代器

你可以这样:

private中只要声明一个char* ptr(或者void* ptr)

然后一次性new一块 raw memory, 具体方法是ptr = new[ sizeof(Base)*SIZE]然后每增加一个base到数组中的时候再初始化, 具体方法是 Base* myBase = new(ptr) Base(10)//这里调用的构造函数是 base(int d):_d(d) {},然后再ptr = ptr + sizeof(Base)

这就解决了你所说的性能问题,当然,这里析构的时候就比较麻烦,你得要显式的先调用存放在内存块中的base析构函数,然后再delete掉内存块,使用delete[]

大概觉得你是新手,所以多说一句new(ptr) Base(10)这个是placement new

参考代码如下:

//////////////////////////////////////////////////////////////////////////////

//类定义

class CPolygon

{

public:

CPolygon(int num)

virtual ~CPolygon()

float GetArea()//取得面积

BOOL SetPoint(int point,float x,float y)//设置第point个点的坐标

private:

BOOL Check() //检查是否有数据没有设置

intpCount //边数,也就是顶点数

float *px //顶点x的数组

float *py //顶点y的数组

BYTE *pv //设置数据标志

}

//////////////////////////////////////////////////////////////////////////////

//类实现

CPolygon::CPolygon(int num)

{

if(num<3) //至少是三角形

{

px=NULL

py=NULL

pv=NULL

pCount=0

}

else

{

px=new float[num] //按num开辟内存

py=new float[num]

pv=new BYTE[num]

memset(px,0,sizeof(float)*num)//初始化内存

memset(py,0,sizeof(float)*num)//初始化内存

memset(pv,0,sizeof(BYTE)*num)//初始化内存

pCount=num

}

}

CPolygon::~CPolygon() //用完要回收开辟的内存

{

if(px) delete []px

if(py) delete []px

if(pv) delete []px

px=NULL

py=NULL

pv=NULL

}

BOOL CPolygon::SetPoint(int point,float x,float y)

{

if(point>=0&&point<pCount) //点在范围内

{

*(px+point)=x

*(py+point)=y

*(pv+point)=1//置1,表示数据已经设置过了

return TRUE

}

return FALSE

}

BOOL CPolygon::Check() //检查合法性

{

if(pCount==0)

return FALSE

for(int i=0i<pCounti++)

{

if(*(pv+i)==0)

return FALSE

}

return TRUE

}

float CPolygon::GetArea()

{

if(Check()) //如果数据准备好

{

//计算结果

//返回结果

}

return 0.0//数据没准备好就返回0.0

}

//////////////////////////////////////////////////////////////////////////////

//类调用,以三角形为例

CPolygon xObject(3)//定义一个三角形

xObject.SetPoint(0,20.2,30.3)//设置第一点的值

xObject.SetPoint(1,80.4,50.5)//设置第二点的值

xObject.SetPoint(2,70.6,40.7)//设置第三点的值

float Result=xObject.GetArea()

CString Info

if(Result==0.0)

Info="计算有错误,请检查设置的点是否正确!"

else

Info.Format("三角型的值是:%f",Result)

MessageBox(Info) //显示结果


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11670308.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存