- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第四次作业第2题,对球对象排序,是指对10个静态数组和20个动态数组一起排序,还是指10个静态数组排序,和对20个动态数组分别进行排序??
答:分别进行排序即可,你非要合起来一起排序也行。
==============================================================================
2.我有以下两个问题:
(1)是不是构造函数和复制构造函数都需要打印被调用的信息?(可是我觉得这样在构造数组的时候会打印很多遍,有点乱)
(2)如何给对象数组的元素赋值?
我有两个想法:
(1)把x,y,z,r设置成为共有成员,可是这样失去了类的封装的作用。
(2)另外定义一个专门给数组赋值的函数,设置成为Ball类的友元函数。
我觉得应该是第二种做法,对吗?
答:(1)在构造函数和复制构造函数里打印被调用的信息,是我们为了跟踪调试,让你知道这些构造函数确实被调用了,实际程序肯定不打印。
(2)用无名对象Ball(x,y,z,r)给对象数组的元素循环逐个赋值即可,不用这么麻烦。
==============================================================================
3.我在做第四次作业第二题的时候,发现输出结果的中间部分出现了两次析构函数被调用,好像是调用排序函数时用到的,我不是很明白,然后在程序里面添了一个显示构造函数被调用的语句(已删)发现在析构之前构造了两个对象,可是为什么不是调用复制构造函数?而且它显示出来拆掉的对象是确定的吗,跟数组里的元素有关系吗?
程序在附件里,请您帮忙看一下。.
#includeiostream
#includestdlib.h
usingnamespacestd;
constdoublepi=3.1415927;
classBall
{public:
Ball(intnx=0,intny=0,intnz=0,intnr=1){x=nx;y=ny;z=nz;r=nr;}
Ball(Ballb);
~Ball(){cout析构函数被调用(x,y,z)r=rendl;}
voidSet(intnewx,intnewy,intnewz,intnewr)
{x=newx;y=newy;z=newz;r=newr;}
intGetX(){returnx;}
intGetY(){returny;}
intGetZ(){returnz;}
intGetR(){returnr;}
voidPrint(){cout球心:(x,y,z)半径:r;}
doubleVolume(){returnpi*r*r*r*4/3.0;}
private:
intx,y,z,r;
};
Ball::Ball(Ballb)
{ x=b.x;y=b.y;z=b.z;r=b.r;}
voidselect(Balla[],intn)
{ Ballb;
intt,i,j,k;
t=a[0].GetR();
for(i=0;in;i++)
{ k=i;
for(j=i+1;jn;j++)
{ if(a[j].GetR()t)
{k=j;t=a[j].GetR();}
}
if(k!=i){b=a[i];a[i]=a[k];a[k]=b;}
t=a[i+1].GetR();
}
}
voidmain()
{ inti,X=0,Y=0,Z=0,R=0;
doubleV=0;
Balla[10],*b;
b=newBall[20];
srand(0);
for(i=0;i10;i++)
{ a[i].Set(rand(),rand(),rand(),abs(rand()));
a[i].Print();
cout体积:a[i].Volume()endl;
X+=a[i].GetX();Y+=a[i].GetY();Z+=a[i].GetZ();R+=a[i].GetR();V+=a[i].Volume();
}
for(i=0;i20;i++)
{ b[i].Set(rand(),rand(),rand(),abs(rand()));
b[i].Print();
cout体积:b[i].Volume()endl;
X+=b[i].GetX();Y+=b[i].GetY();Z+=b[i].GetZ();R+=b[i].GetR();V+=b[i].Volume();
}
select(a,10);
select(b,20);
for(i=
文档评论(0)