C+的+_构造与析构函数知识详细讲解(有实例).ppt

C+的+_构造与析构函数知识详细讲解(有实例).ppt

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

构造函数与析构函数(扩充版) 构造函数 定义构造函数 具有构造函数的类如何创建对象 析构函数 复制构造函数 1 构造函数constructor(对象的初始化) 构造函数是每个类都具有的一种特殊函数,有以下三特点: 构造函数的名字必须与类名相同; 构造函数没有函数(返回)类型—不是void; 在创建对象时,构造函数才被系统自动调用,不能被用户显式调用。 构造函数的说明 创建对象时系统1)为对象的数据成员分配存储空间,2)调用构造函数(可以是默认构造函数),执行构造函数体中的代码。 由于构造函数在创建新对象时被系统自动调用,而且类的数据成员多为private,因此可在构造函数中进行数据成员的初始化,将构造函数的参数值赋给对象的数据成员,从而在创建对象时进行初始化。 每个类都具有构造函数,没有定义构造函数的类,系统自动提供默认构造函数(什么都不做,空函数) 警告:一个常见的错误是在构造函数前放置一个void。 1-2 因为创建对象时系统要调用构造函数,则必须根据构造函数形式创建对象(创建对象时为构造函数提供实参) (1) 使用不带参数的构造函数创建对象时,对象的创建形式为: 类名 对象名;或: 类名 对象名= 类名(); 如: Circle cir1; 或: Circle cir1= Circle(); 注意: Circle a();//错, 声明了一个函数名为a,返回值为Circle类的对象。 Circle类定义无参构造函数_单文件 Circle类定义无参构造函数_多文件 ⑵ 使用带参数构造函数创建对象(必须为构造函数提供实参) Circle类定义有参构造函数_多文件 ⑶ 重载构造函数 此时可根据构造函数的形式采用多种形式创建不同的对象。 Circle类定义重载构造函数_多文件 ⑷ 使用带默认参数的构造函数 Circle类定义带默认参数构造函数_多文件 2 析构函数Destructor 与构造函数相对。当创建一个对象时:1)为其数据成员分配存储空间,2)其构造函数被调用;而对象的生命期结束时:1)析构函数被调用, 2)释放为其分配的存储空间。 析构函数名是在类名前面加上符号“~”,析构函数没有参数和返回值。 所以不能重载,一个类只能定义一个析构函数 析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。通常是释放已分配的内存空间。。 如果没有显式定义析构函数,那么编译器为每个类定义一个默认的析构函数。每个类都有构造函数和析构函数。 析构函数举例:Circle类定义析构函数_多文件 析构函数举例:日期类CDate //date.h class CDate { public: CDate(int y,int m,int d); ~CDate( ); void Print( ); private: int year,month,day; }; //date.cpp #include iostream.h #include “date.h” CDate::CDate(int y,int m,int d) { year=y; month=m; day=d; coutConstructor called.\n; } CDate::~CDate( ) { coutDestructor call.\n; } void CDate::Print( ) { coutyear/month/dayendl; } 注意 所有的类中都应包含构造函数和析构函数,且是由系统自动调用的。如果在类中没有给出定义,则系统会为其建立缺省构造/析构函数。 一般来讲,在创建对象时都要进行初始化,因此类中都要定义构造函数; 而析构函数的定义则可根据需要给出。当程序终止时,所有对象都会被销毁。但是如果对象的存储空间在栈stack中,则不能编写代码显式地销毁。只有动态创建于堆heap中的对象,才能用delete操作符显式地销毁。因此如果在构造函数中进行了动态内存资源的申请,则必须定义析构函数完成内存的释放. 析构函数应用:整型数组类CArray class CArray { public: CArray(int size); //创建包含size个数组元素的整型数组。 ~CArray(); //析构函数,删除动态申请的数组空间 int getAt(int nIndex); //得到下标为nIndex的数组元素的值 void setAt(int nIndex, int newElement); //将下标为nIndex的数组元素的值设置为newElement. pr

文档评论(0)

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

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

1亿VIP精品文档

相关文档