如何定义CArray动态数组?我想在头文件中定义动态数组为什么不可以,因为我想把它传递到另一个类中?

 我来答
LG_MYlove
2012-11-03 · TA获得超过647个赞
知道小有建树答主
回答量:234
采纳率:93%
帮助的人:212万
展开全部
template <class TYPE, class ARG_TYPE> class CArray : public
CObject

参数:
TYPE
模板参数指定存储在数组中的对象的类型。TYPE是一个由CArray返回的参数。

ARG_TYPE
模板参数指定用于访问存储在数组中对象的参数类型。通常是一个对TYPE的参考。ARG_TYPE是一个传递给CArray的参数。

说明:
CArray类支持与CArray相似的数组,但是必要时可以动态压缩并扩展。数组索引从0开始。可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。
和CArray一样,CArray索引元素的访问时间是不变的,与数组大小无关。

提示:
在使用一个数组之前,使用SetSize建立它的大小和为它分配内存。如果不使用SetSize,则为数组添加元素就会引起频繁地重新分配和拷贝。频繁地重新分配和拷贝不但没有效率,而且导致内存碎片。

如果需要一堆数组中的个别数据,必须设置CDumpContext对象的深度为1或更大。
此类的某成员函数调用全局帮助函数,它必须为CArray的大多数使用而定制。请参阅宏和全局量部分中的“类收集帮助器”。
当从一个CArray对象中移去元素时,帮助函数DestructElements被调用。
当添加元素时,帮助函数ConstructElements被调用。
数组类的派生与列表的派生相似。
如果要了解关于使用CArray的更多信息,请参阅联机文档“Visual
C++程序员指南”中的“收集”。
请记住:使用CArray一定要包含头文件afxtempl.h。
#include <afxtempl.h>
用法

CArray <CPoint,CPoint&> m_Array;
m_Array.SetSize(10,10);
CPoint pt1(10,10);
m_Array.Add(pt1);
CPoint pt2(10,50);
m_Array.Add(pt2);
CPoint pt3(10,100);
m_Array.Add(pt3);
int size=m_Array.GetSize();
CClientDC dc(this);
dc.MoveTo(0,0);
CPoint pt;
for(int i=0;i<size;i++)
{
pt=m_Array.GetAt(i);
dc.LineTo(pt);
}
追问
你这个我看到过,我只是想在另外一个类中使用它,但是发现不行。
追答
报什么错?应该是可以的
JClanguage
2012-11-03
知道答主
回答量:39
采纳率:0%
帮助的人:8.6万
展开全部
你如果想定义动态数组,你干脆定义一个单链表得了。你还可以定义这个:
class CArray
{
public:/ private:
char/int/float... *pdata;
public:
CArray(const int n){ pdata= new char/int/float... [n];}
...
};
在构造函数中让用户选择数组的元素个数,参数必须是常量,然后动态分配一个存有n个元素的数组,然后把第一个元素赋给pdata。如果你想修改数组元素个数,可以把pdata指向的数组里的所有元素存储起来,比如赋给int/char/float... *a,然后再用new运算符分配一个n个元素的数组给pdata,然后拷贝a的所有元素给pdata,然后用delete[] a把a指向的内存释放了。这是vector模版使用的策略。注意,在头文件中只是声明,不是定义,要在源文件中定义。你只需包含头文件就可以了。
追问
在头文件中如何声明呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无上光荣3
2012-11-03
知道答主
回答量:16
采纳率:0%
帮助的人:7.2万
展开全部
a[5]数组中 5表示a数组中有5个元素,分别是a[0],a[1],a[2],a[3],a[4].

在sum=a[0]+a[1]+a[2]+a[3]+a[4]+a[5] 公式中严格的讲

将会出现‘下标越界’或‘上标越界’的错误(在不同的语言中数组的开始时不一样的!例如:c是 0开始;basic是1开始的!)!但是分在什么里面运行里!

而a[5]的值到底是多少呢?

就要知道,这个数组是如何在内存中存储的了!

数组如何在内存中存储,就要知道,数组是什么类型的?
不同的类型占用不同内存的大小!

例如: 地址:&1205 存储的 是a[4]的值,数组a是一个整形!

那a中的每一个元素占用的内存大小就是4字节,那么总共开辟的空间便是20字节的内存大小!

a[5]就是这20字节内存中,后面的4字节中得值。

a数组后面的4字节的值是多少呢?

谁也不知道?

只有内存知道!嘿嘿!

所以a[5]是一个不可预料的值!赞同4| 评论
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zcy990718
2012-11-03 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:66%
帮助的人:1522万
展开全部
typedef CArray <BaseClass *,BaseClass *> CBasePtrArr;///定义类型
CBasePtrArr m_pBaseArr;//定义变量
BaseClass *pbc = new BaseClass;//动态创建变量
m_pBaseArr.Add(pba);///加入库中
BaseClass *pbc1 = m_pBaseArr.GetAt(0);///从库中提取元素
void PassArray(CBasePtrArr &bpa)//传递引用参数
{
BaseClass *pbc2 = m_pBaseArr.GetAt(0);
}

////删除元素
delete pBaseArr[2];
pBaseArr.RemoveAt(2);
更多追问追答
追问
谢谢,这个从库中提取元素,是只能提取一个吗?
追答
一般是,当然也可以通过GetData而获取其指针
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mirro187_
2012-11-03 · 超过11用户采纳过TA的回答
知道答主
回答量:76
采纳率:0%
帮助的人:72.2万
展开全部
你加了使用CArray的头文件了吗
追问
#include 

是这个吗?加了,可以使用,只是不知道如何传递这个数组到另一个类。
追答
CArray & iArray;这样定义的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式