能在类初始化时传入数组大小吗?

liyxxx 2010-08-30 11:20:09
请教下各位高手,我写了一个类,包含一个数组成员,而这个数组大小是在程序编译的时候确定的。比如有这么一个类:
#define NUM 100
class Myclass
{
public:
Myclass();
private:
string MyData[NUM];
};
可是我想在类被程序包含使用的时候,由程序决定这个数组的大小,就是说,这个#define NUM 10是由使用类的程序来决定的,如果不更改类的代码,有什么办法可以实现吗?我想把类做的能通用一点。
...全文
188 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2010-08-30
  • 打赏
  • 举报
回复
不用,就永远不会[Quote=引用 16 楼 liyxxx 的回复:]
谢谢楼上,一语中的。主要是对new心存畏惧,而且对资源的占用不放心。毕竟在掌上设备中资源有限。
自己也是个新手,学艺不精呀。
[/Quote]
liyxxx 2010-08-30
  • 打赏
  • 举报
回复
谢谢楼上,一语中的。主要是对new心存畏惧,而且对资源的占用不放心。毕竟在掌上设备中资源有限。
自己也是个新手,学艺不精呀。
arong1234 2010-08-30
  • 打赏
  • 举报
回复
我想问题关键是:这明明是适合使用new的情况,何必强迫自己一定要用固定尺寸?使用new的数组多好控制,何必用宏[Quote=引用 14 楼 liyxxx 的回复:]
恩,估计只能这么做了,我把简单的问题搞复杂了。本来是想,做个类,放在任何程序中,只要一包含就可以用了,而且程序中并不知道需要定义NUM。或者像函数那样可以把NUM传给类,呵呵,似乎有点异想天开。最后想想,还是这样解决吧,虽然不完美,起码程序中没定义NUM时也不会出错。谢谢各位的热心。
#ifndef NUM
#define NUM 10
#endif
[/Quote]
liyxxx 2010-08-30
  • 打赏
  • 举报
回复
恩,估计只能这么做了,我把简单的问题搞复杂了。本来是想,做个类,放在任何程序中,只要一包含就可以用了,而且程序中并不知道需要定义NUM。或者像函数那样可以把NUM传给类,呵呵,似乎有点异想天开。最后想想,还是这样解决吧,虽然不完美,起码程序中没定义NUM时也不会出错。谢谢各位的热心。
#ifndef NUM
#define NUM 10
#endif
arong1234 2010-08-30
  • 打赏
  • 举报
回复
你不同的程序中把宏定义成不同的值不就可以?[Quote=引用 11 楼 liyxxx 的回复:]
哎,难道我没有表述清楚?这个NUM是在程序编译的时候确定的,但是在不同的程序中是不一样的。我只是希望将类放在别的程序中时不需要做任何改动。
[/Quote]
dingshaofengbinbin 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hai040 的回复:]
其实还是可以的
模板
template <int n>
...
string xx[n];
};
[/Quote]
这个可以!!!
#include <iostream>
using namespace std;
template<int n>
class A
{
public:
A(){}
~A(){}
char b[n];
};

int main()
{
A<10> *a=new A<10>();
cout<<sizeof(a->b)<<endl;
return 0;
}
输出的是10.
liyxxx 2010-08-30
  • 打赏
  • 举报
回复
哎,难道我没有表述清楚?这个NUM是在程序编译的时候确定的,但是在不同的程序中是不一样的。我只是希望将类放在别的程序中时不需要做任何改动。
小楫轻舟 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liyxxx 的回复:]

直接写10当然可以,可是我说过了,想把类做的通用一些,这个10是在程序中决定的,而不是类中。
如果把类包含在别的程序中,这个数值是要更改的,而我不想改动类。
[/Quote]
又想通用,又不想改动类?
有点无语啊
liyxxx 2010-08-30
  • 打赏
  • 举报
回复
直接写10当然可以,可是我说过了,想把类做的通用一些,这个10是在程序中决定的,而不是类中。
如果把类包含在别的程序中,这个数值是要更改的,而我不想改动类。
hai040 2010-08-30
  • 打赏
  • 举报
回复
其实还是可以的
模板
template <int n>
...
string xx[n];
};
arong1234 2010-08-30
  • 打赏
  • 举报
回复
而且,既然你说“由程序决定这个数组的大小”,那么这个数组得大小就不是固定得,或者至少是需要计算才固定得,那么这就是不行得
[Quote=引用楼主 liyxxx 的回复:]
请教下各位高手,我写了一个类,包含一个数组成员,而这个数组大小是在程序编译的时候确定的。比如有这么一个类:
#define NUM 100
class Myclass
{
public:
Myclass();
private:
string MyData[NUM];
};
可是我想在类被程序包含使用的时候,由程序决定这个数组的大小,就是说,这个#define NUM 10是由使用……
[/Quote]
arong1234 2010-08-30
  • 打赏
  • 举报
回复
你既然都固定了,干吗一定要宏?直接写10不就可以?即使要宏,你也可以在类定义前定义宏啊?难道你在类中用这个宏还遇到问题了?
[Quote=引用 5 楼 liyxxx 的回复:]
可是,在程序编译的时候,数组大小是已经确定了的,并不需要动态改变。难道也没有办法实现?
也就是说,有没有办法把这句#define NUM 10放到程序中,而在类中可以使用NUM。
[/Quote]
liyxxx 2010-08-30
  • 打赏
  • 举报
回复
可是,在程序编译的时候,数组大小是已经确定了的,并不需要动态改变。难道也没有办法实现?
也就是说,有没有办法把这句#define NUM 10放到程序中,而在类中可以使用NUM。
cbib_cat 2010-08-30
  • 打赏
  • 举报
回复
数组的空间分配在编译期间就要完成。
pengzhixi 2010-08-30
  • 打赏
  • 举报
回复
用new或者vector吧
小楫轻舟 2010-08-30
  • 打赏
  • 举报
回复
new
arong1234 2010-08-30
  • 打赏
  • 举报
回复
不行,你只能用new来实现动态数组

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧