如何创建动态对象数组?

fxniao 2003-03-30 10:34:03
比如:
class Person
{
int age;
public:
Person(int n)
{
age=n;
}
};


void main(void)
{
Person *p=new Person(30)[10];//要创建10个对象,而且用指定的构造函数创建
//但编译出错,为何? 还有什么方法可以实现这个目的呢?
}
...全文
592 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
maurice1983 2003-04-07
  • 打赏
  • 举报
回复
class Person
{
int age;
public:
Person()
{
age=30;
}
};


void main(void)
{
Person *p=new Person[10];
}

fxniao 2003-04-07
  • 打赏
  • 举报
回复
Person():age(30)
{
}
实际上是和
Person()
{
age=30;
}
是一样的。
看罢各位观点,基本上是2种方法,一个是调用默认构造函数,另外就是用带缺省值的构造函数。但在具体创建对象时形式是一样的。
均为 new Person[10];//此处无法再指定参数了。
lymgf 2003-04-07
  • 打赏
  • 举报
回复
class Person
{
int age;
public:
Person():age(30)
{
}
};

void main(void)
{
Person *p=new Person[10];//要创建10个对象,而且用指定的构造函数创建
}

要给成员变量初始化的话一般要这样写。
lymgf 2003-04-07
  • 打赏
  • 举报
回复
上机,上机
tuxw 2003-04-06
  • 打赏
  • 举报
回复
动态分配数组好象是个经久不衰的话题,能不能先去看看页面顶部的帖子:多维数组如何在堆中声明 ??
bm1408 2003-04-06
  • 打赏
  • 举报
回复
楼上兄的回答是错误的!
TO: fireinsky(喜子)
在C++中,用new来创建一个对象数组时,只能调用缺省构造函数,也就是不带参数的构造函数。很自然,上面的方法要出错。

不一定非要是你你所说的那样!
example:
class person
{public:
person(*p="no name")
{
......
}

}


main()
{ person *p=new per[30];
}
它调用的有参数的!

fxniao 2003-04-06
  • 打赏
  • 举报
回复
clarkchu2002(chu) ( )
很有创意,用默认参数的方法解决了这个问题。
cxjddd 2003-03-30
  • 打赏
  • 举报
回复
我觉得,可以设定一个静态变量,在new之前,给这个静态变量赋值。再在构造函数里用到那个静态变量,就可以达到“传”参数的目的了。
cxjddd 2003-03-30
  • 打赏
  • 举报
回复
>>如果你没有定义构造函数,才会调用缺省构造函数;如果你定义了构造函数,new 就会调用你所定义的构造函数,而不是缺省构造函数。
<<我学得不是这样吧。如果我定义了一个带参数的构造函数,那么new从哪里找来这个参数?
clarkchu2002 2003-03-30
  • 打赏
  • 举报
回复
谁说 在C++中,用new来创建一个对象数组时,只能调用缺省构造函数,也就是不带参数的构造函数。?
下面的代码可以证明 new 可以调用带参数的构造函数。

#include <iostream.h>
class Person
{
int age;
public:
Person(int n = 30)
{
age=n;
}
void print()
{
cout<<age<<endl;
}
};


void main(void)
{
Person *p=new Person[10];//要创建10个对象,而且用指定的构造函数创建
//但编译出错,为何? 还有什么方法可以实现这个目的呢?
for(int i = 0 ; i<10; i++)
(p+i)->print();
}
如果你没有定义构造函数,才会调用缺省构造函数;如果你定义了构造函数,new 就会调用你所定义的构造函数,而不是缺省构造函数。

Gallen 2003-03-30
  • 打赏
  • 举报
回复
可以用vector来代替你的数组:

#include <vector>

....

std::vector<Person> Persons(10, Person(30));
  • 打赏
  • 举报
回复
呵呵,那不是五颗星,只是五个三角而已:)只要你常来回答问题,你也能升到这的,只要2000分就可以了
fxniao 2003-03-30
  • 打赏
  • 举报
回复
micropentium6(小笨) ( ) 信誉:100
厉害啊,五星上将
  • 打赏
  • 举报
回复
你可以给类设计一个赋值的函数的:)
fxniao 2003-03-30
  • 打赏
  • 举报
回复
只能用默认构造函数吗?
那太不方便了
  • 打赏
  • 举报
回复
当你用这个方法创建数组时必须有默认的构造函数,也就是说Person(30)[10];这种语法是不允许的,你只能new person[10]//调用默认构造函数
fireinsky 2003-03-30
  • 打赏
  • 举报
回复
在C++中,用new来创建一个对象数组时,只能调用缺省构造函数,也就是不带参数的构造函数。很自然,上面的方法要出错。
thrillers 2003-03-30
  • 打赏
  • 举报
回复
new 后面的格式只能是 类型+名称 所以呢,new后面如果跟数组的话,只能写明数组元素的个数,不能再带参数,只能手工初始化
Have Fun!^__^
yeahspyme 2003-03-30
  • 打赏
  • 举报
回复
同意clarkchu2002(chu)!
lfph_cn 2003-03-30
  • 打赏
  • 举报
回复
在用NEW创建对象数组时只能使用无参数的构造函数

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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