第9讲构造函数和析构函数构造函数析构函数This指针This指针.PPT

第9讲构造函数和析构函数构造函数析构函数This指针This指针.PPT

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9讲构造函数和析构函数构造函数析构函数This指针This指针

* * * * * * class A{ float x,y; public: A(){ }//缺省的构造函数,编译器自动产生,可以不写 float Sum(void) { return x+y; } void Set(float a,float b) { x=a; y=b;} void Print(void) { coutx=x\ty=yendl; } }; void main(void) { A a1,a2;//产生对象时,自动调用缺省的构造函数,不赋值 a1.Set (2.0,4.0); couta1: ; a1.Print (); couta1.sum=a1.Sum ()endl; a2.Print();//打印随机值 } * 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,定义时,没有构造函数可供调用 构造函数 在类中,若定义了没有参数的构造函数,或各参数均有缺省值的构造函数也称为缺省的构造函数,缺省的构造函数只能有一个。 产生对象时,系统必定要调用构造函数。所以任一对象的构造函数必须唯一。 * 举例 * 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); } 两个函数均为缺省的构造函数 两个构造函数均可供调用,构造函数不唯一 动态建立对象时的构造函数 STEP 1 使用new运算符来动态地建立对象 STEP 2 自动调用构造函数,完成初始化对象的数据成员 返回动态对象的起始地址 STEP 4 不再使用动态对象时,用delete运算符来释放对象所占用的存储空间 STEP 3 用new建立类的对象时,可以使用参数初始化动态空间。 * 构造函数与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); pa2=new A; pa1-Print(); pa2-Print(); delete pa1; //用delete释放空间 delete pa2; //用delete释放空间 } 输出:3 5 0 0 用new动态开辟对象空间,初始化 用new动态开辟空间,调用构造函数初始化 * * 第9讲 构造函数和析构函数 构造函数 析构函数 This 指针 * 析构函数 析构函数的作用与构造函数正好相反,是在对象的生命期结束时,释放系统为对象所分配的空间,即要撤消一个对象。 析构函数也是类的成员函数,类体外定义析构函数的格式为: ClassName::~ClassName( ) { ...... // 函数体; } * 析构函数的特点如下: 析构函数是成员函数,函数体可写在类体内,也可写在类体外。 析构函数是一个特殊的成员函数,函数名必须与类名相同,并在其前面加上字符“~”,以便和构造函数名相区别。 析构函数不能带有任何参数,不能有返回值,不指定函数类型。 一个类中,只能定义一个析构函数,析构函数不允许重载。 析构函数是在撤消对象时由系统自动调用的。 在程序的执行过程中,当遇到某一对象的生存期结束时,系统自动调用析构函数,然后再收回为对象分配的存储空间。 * 析构函数调用 class A{ float x,y; public: A(float a,float b) { x=a;y=b;cout调用非缺省的构造函数\n;} A() { x=0; y=0; cout调用缺省的构造函数\

文档评论(0)

suijiazhuang1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档