- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * [例9.10] #include iostream.h class M { public: M(int i,int j) { m1=i;m2=j; } void Print() { coutm1,m2endl; } private: int m1,m2; }; class N { public: N(int i,int j,int k):m(i,j),n(k) { n=k; } void Print() { m.Print(); coutnendl; } private: M m; int n; }; void main() { M m1(3,9); m1.Print(); N n1(10,20,30); n1.Print(); } 3,9 10,20 30 * 9.4.2 堆对象 程序在运行时所创建的对象称堆对象,因为它们被存放在内存的堆区内而得名的。 1. 使用运算符new创建堆对象 格式如下: new 类型说明符 (初始值列表) new的表达式是一个指针。 使用new运算符创建对象时,通常将该运算符获取的地址值赋给同类的对象指针。 * 例如, int *p; p=new int(8); A *pa; pa = new A(8,5); pa是一个指向A类对象的指针。创建一个由pa指针所指向的对象,该对象通过自动调用2个参数的构造函数被初始化。 实际上,运算符new相当于一个创建动态对象的函数,创建成功返回一个有效的内存地址值,否则返回0。 * 使用运算符new还可以创建数组。格式如下: new 类型说明符 [算术表达式] 该表达式是一个指向数组首元素的指针。 例如, A *ptr; ptr = new A[10]; ptr是指向对象数组首元素的指针,该对象数组元素是A类对象,共10个。 使用new创建数组时,不能为该数组指定初始值,其初始值为默认值。 * 2. 使用运算符delete释放堆对象 使用new所创建的堆对象占用内存的堆区,当该对象不再使用时可以随时释放。释放堆对象使用运算符delete。 例如,pa是一个指向对象的指针,释放该堆对象的格式如下: delete pa; 例如,ptr是一个指向对象数组的指针,释放该对象数组的格式如下: delete [ ] ptr; 释放了由ptr所指向的对象数组的所有元素。 释放堆对象时系统自动调用其析构函数。 * [例9.11] #include iostream.h #include string.h class B { public: B() { coutDefault\n; } B(char *s,double n) { strcpy(name,s); b=n; coutConstructor\n;} ~B() { coutDestructor nameendl; } void getb(char *s,double n) { strcpy(s,name); n=b; } private: char name[80]; double b;}; void main() { double n; char s[80]; B *p=new B(Ma,7.8); p-getb(s,n); couts,nendl; delete p; B *pb; pb=new B[3]; pb[0]=B(Wang,4.6); pb[1]=B(Zhang,2.9); pb[2]=B(Li,8.2); for(int i=0;i3;i++) { pb[i].getb(s,n); couts,nendl; } delete[] pb; } * 执行程序后,输出结果如下: Constructor Ma,7.8 Detructor Ma Default Default Default Constructor Destructor Wang Constructor Destructor Zhang Constructor Destructo
原创力文档


文档评论(0)