第9章 关于类与对象的进一步讨论1(构造函数与析构函数).ppt

第9章 关于类与对象的进一步讨论1(构造函数与析构函数).ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
调用构造函数和析构函数的顺序 在一般情况下,调用析构函数的次序正好与调用构造函数的次序相反: 最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。 可简记为: 先构造的后析构,后构造的先析构。 ~A() { cout调用析构函数\n”x;} * 构造函数和析构函数是在类体中说明的两种特殊的成员函数。 构造函数是在创建对象时,使用给定的值来将对象初始化(特别是私有数据成员的初始化,公用的数据成员:Time t={14,56,30};)。 析构函数的功能正好相反,是在系统释放对象前,对对象做一些善后工作。 构造函数是类的成员函数,系统约定构造函数名必须与类名相同。构造函数提供了初始化对象的一种简单的方法。在建立对象时自动执行构造函数,它的作用是对该对象中的各数据成员赋初值。 构造函数可以带参数、可以重载,同时不具有任何类型,不返回任何值。 class A{ float x,y; public: A(float a,float b){ x=a; y=b;}//构造函数,初始化对象 float Sum(void) { return x+y; } void Set(float a,float b) { x=a; y=b;} Print(void) { coutx=x\ty=yendl;} }; void main(void) { A a1(2.0, 3.0);//定义时调用构造函数初始化 A a2(1.0,2.0); a2.Set(10.0, 20.0); //利用成员函数重新为对象赋值 a1.Print(); a2.Print(); }//构造函数不需用户调用,也不能被用户调用,因此无法采用常规的调用函数的 //方法给出实参。实参是在定义对象时给出的。 对构造函数,说明以下几点: 1.构造函数的函数名必须与类名相同。构造函数的主要作用是完成初始化对象的数据成员以及其它的初始化工作。 2. 在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。 3. 一个类可以定义若干个构造函数。当定义多个构造函数时,必须满足函数重载的原则。 4.构造函数可以指定参数的缺省值。 5.若定义的类要说明该类的对象时,构造函数必须是公有的成员函数。如果定义的类仅用于派生其它类时,则可将构造函数定义为保护的成员函数。 6.在构造函数体中不仅可以对数据成员赋初值,而且可以包含其他语句,例如cout语句。 7.如果用户没有定义构造函数,则c++系统会自动生成一个构造函数,只是这个构造函数体式空的,也没有参数,不执行初始化操作。 由于构造函数属于类的成员函数,它对私有数据成员、保护的数据成员和公有的数据成员均能进行初始化。 class A{ float x,y; public: A(float a, float b=10) { x=a; y=b; } A() { x=0; y=0;} void Print(void) { coutx\tyendl; } }; void main(void) { A a1, a2(20.0), a3(3.0, 7.0); a1.Print(); a2.Print(); a3.Print(); } 0 0 20 10 3 7 带缺省参数的构造函数 不带参数的构造函数 每一个对象必须要有相应的构造函数 每一个对象必须要有相应的构造函数 若没有显式定义构造函数,系统默认缺省的构造函数。 class A{ float x,y; public: A() {} void Print(void) { coutx\tyendl; } }; 隐含的缺省的构造函数 A a1, a2; 只允许这样定义对象 对象开辟了空间,但没有初始化 对局部对象,静态对象,全局对象的初始化 对于局部对象,每次定义对象时,都要调用构造函数。 对于静态对象,是在首次定义对象时,调用构造函数的,且由于对象一直存在,只调用一次构造函数。 对于全局对象,是在main函数执行之前调用构造函数的。 class A { int x,y; public: A(int a){ x=a; cout“1\n”;} A(int a, int b) { x=a,y=b;cout“2\n”;} }; A a1(3); void f(void) { A b(2,3);} void main(void) { A a2(4,5); f(); f(); } 1 2 2

文档评论(0)

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

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

1亿VIP精品文档

相关文档