3.2 构造函数及析构函数.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.2 构造函数和析构函数 3.2.1 构造函数 1.功能:用于为对象分配空间,进行初始化。 2. 构造函数定义格式: 函数名(参数表){函数体} 3.构造函数的特殊性质: 函数名与类名相同。 不能有返回类型。 可以带参数,因此可以重载。 构造函数在创建实例对象时能被自动调用。 4. 利用构造函数定义对象 类名 对象名(实参表); 例3-2-1:为point类添加构造函数 class point { int x,y; public: void init(int a,int b){x=a; y=b;} …… }; 什么时候调用构造函数? 在类对象进入其作用域时调用构造函数 不需要在定义构造函数时声明类型 void Time( ) {…} //错误 构造函数用来进行对象的初始化 构造函数不需要用户调用,也不能被用户调用 t1.Time(); //错误 建立对象时系统自动执行,且仅执行一次 构造函数通常声明为Public 构造函数的内容? 在构造函数的函数体中,可以对数据成员进行赋值,也可以包含其它语句。 不提倡在构造函数中加入与初始化无关的语句,以保持程序的清晰。 例3-2-2:Date类的构造函数 class Date { long int year; int month,day; public: void init(int y,int m,int d) { year=y; month=m; day=d; } …… }; 说明: 在声明类时,如果没有为类定义构造函数,则系统自动生成一个默认的空的构造函数。这个构造函数只为对象开辟一个存储空间,并不能给对象中的数据成员赋初值。 以point类为例的默认构造函数格式如下: point:: point(){ } 说明(续前页): 构造函数也可以采用初始化表的形式对数据成员进行初始化。 3.2.2 析构函数 1.功能:正好与构造函数相反,通常用于执行一些清理任务。如释放动态分配给对象的内存空间等。 2.析构函数特点: 析构函数名=~+类名 析构函数没有参数,也没有返回类型,因此不能重载 撤消对象时,系统会自动调用析构函数 3.格式:~point( ){ 函数体 } 3.2.2 析构函数 析构函数的执行 函数中定义的对象,当函数调用结束时对象被释放,在对象释放前自动执行析构函数 static局部对象在结束函数调用时对象并不释放,因此只有在main函数结束或调用exit函数结束程序时才调用析构函数 全局对象在程序的流程离开其作用域时,调用该全局对象的析构函数 如果用new运算符动态的建立一个对象,则当用delete运算符释放对象时,先调用该对象的析构函数 3.2.2 析构函数 说明: 声明类时如果没有定义析构函数,则系统自动生成一个默认的析构函数。 point::~point(){ } 当对象消失时,系统会自动调用析构函数 若使用new运算符动态创建对象时,在使用delete运算符释放它时,delete会自动调用析构函数。 如:point *p=new point( ); …… delete p; //此处自动调用析构函数 3.2.2 构造函数和析构函数的调用顺序 可简单的记为: 先构造的后析构,后构造的先析构 并不是任何情况下都按这一原则处理: void fn() { Student stud1; static Student stud2; …. } 原因:两个对象的存储类别不同、生命周期不同 3.2.3 构造函数进一步讨论 1.缺省参数的构造函数 2.重载构造函数 3.拷贝构造函数 1. 缺省参数的构造函数 3.2.3 class point { int x,y; public: point(int a,int b){x=a; y=b;} …… }; int main(){ point p1(10,20); …… } 2.重载构造函数 3.2.3 重载函数概念回顾:多个函数起相同名字,但是参数类型或参数个数不同。 例: point(int a,int b){x=a;y=b;} ① point(int a){x=a;y=0;} ② point( ){x=0;y=0;

文档评论(0)

0520 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档