- 1、本文档共930页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 关于缺省的构造函数,说明以下几点: 1、在定义类时,只要显式定义了一个类的构造函数,则编译器就不产生缺省的构造函数 2、所有的对象在定义时,必须调用构造函数 不存在没有构造函数的对象! * class A{ float x,y; public: A(float a,float b) { x=a; y=b; } void Print(void){ coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); } 显式定义了构造函数,不产生缺省的构造函数 error,定义时,没有构造函数可供调用 * 3、在类中,若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为缺省的构造函数,缺省的构造函数只能有一个。 4、产生对象时,系统必定要调用构造函数。所以任一对象的构造函数必须唯一。 * class A{ float x,y; public: A(float a=10,float b=20){ x=a; y=b; } A(){ } void Print(void){ coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); } 两个函数均为缺省的构造函数 两个构造函数均可供调用,构造函数不唯一 * 构造函数与new运算符 可以使用new运算符来动态地建立对象。建立时要自动调用构造函数,以便完成初始化对象的数据成员。最后返回这个动态对象的起始地址。 用new运算符产生的动态对象,在不再使用这种对象时,必须用delete运算符来释放对象所占用的存储空间。 用new建立类的对象时,可以使用参数初始化动态空间。 * class A{ float x,y; public: A(float a, float b) { x=a;y=b; } A() { x=0; y=0; } void Print(void) { coutx\tyendl; } }; void main(void) { A *pa1,*pa2; pa1=new A(3.0, 5.0);//用new动态开辟对象空间,初始化 pa2=new A;//用new动态开辟空间,调用构造函数初始化 pa1-Print(); pa2-Print(); delete pa1; //用delete释放空间 delete pa2; //用delete释放空间 } 5 0 0 * 析构函数 析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为对象所分配的空间,即要撤消一个对象。 析构函数也是类的成员函数,定义析构函数的格式为: ClassName::~ClassName( ) { ...... // 函数体; } * 析构 函数的特点如下: 1、析构函数是成员函数,函数体可写在类体内,也可写在类体外。 2、析构函数是一个特殊的成员函数,函数名必须与类名相同,并在其前面加上字符“~”,以便和构造函数名相区别。 3、析构函数不能带有任何参数,不能有返回值,不指定函数类型。 * 在程序的执行过程中,当遇到某一对象的生存期结束时,系统自动调用析构函数,然后再收回为对象分配的存储空间。 4、一个类中,只能定义一个析构函数,析构函数不允许重载。 5、析构函数是在撤消对象时由系统自动调用的。 * class A{ float x,y; public: A(float a,float b) { x=a;y=b;cout调用非缺省的构造函数\n;} A() { x=0; y=0; cout调用缺省的构造函数\n ;} ~A() { cout调用析构函数\n;} void Print(void) { coutx\tyendl; } }; void main(void) { A a1; A a2(3.0,30.0); cout退出主函数\n; } 调用缺省的构造函数 调用非缺省的构造函数 退出主函数 调用析构函数 调用析构函数 * 在程序的执行过程中,对象如果用new运算符开辟了空间,则在类中应该定义一个析构函数,并在析构函数中使用delete删除由new分配的内存空间。因为在撤消对象时,系统自动收回为对象所分配的存储空间,而不能自动收回由new分配的动态存储空间。 * class Str{ char *Sp; int Length; public: Str(char *string) { if(strin
您可能关注的文档
- 隧道外业勘测细则.doc
- 酒店行业研究.pptx
- 锂离子电池知识简介.ppt
- 音乐基础知识H.ppt
- 霍兰德职业兴趣测试及心理压力测试.ppt
- 静电喷涂工艺.pptx
- 预防接种管理.docx
- 风险汇聚安排和风险分散化.ppt
- 阳春三月话养生.ppt
- 饮用水水质检测方法、设备简介.doc
- 甘肃省白银市会宁县第一中学2025届高三3月份第一次模拟考试化学试卷含解析.doc
- 2025届吉林市第一中学高考考前模拟生物试题含解析.doc
- 四川省三台县芦溪中学2025届高三下第一次测试生物试题含解析.doc
- 2025届江苏省启东市吕四中学高三适应性调研考试历史试题含解析.doc
- 浙江省宁波市十校2025届高三二诊模拟考试历史试卷含解析.doc
- 甘肃省甘南2025届高考生物必刷试卷含解析.doc
- 河北省石家庄市一中、唐山一中等“五个一”名校2025届高考历史四模试卷含解析.doc
- 江西省南昌市进贤一中2025届高考生物考前最后一卷预测卷含解析.doc
- 甘肃省白银市会宁县第四中学2025届高三第二次模拟考试历史试卷含解析.doc
- 宁夏银川市宁夏大学附属中学2025届高考化学押题试卷含解析.doc
文档评论(0)