CTO下载-C第讲-构造函数与析构函数_第1页
CTO下载-C第讲-构造函数与析构函数_第2页
CTO下载-C第讲-构造函数与析构函数_第3页
CTO下载-C第讲-构造函数与析构函数_第4页
CTO下载-C第讲-构造函数与析构函数_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、构造函数与析构函数构造函数与析构函数的作用z它们是特殊的成员函数z构造函数用于创建对象,初始化对象的成员:y为对象分配空间;对数据成员赋初值;请求其他资源z析构函数用于撤销对象构造函数z构造函数是一个类的特殊成员函数,它的函数名与类名相同,它可以有任意类型的参数,但 不能具有返回类型。当创建一个对象时,系统自动调用构造函数(它不能显示调用)。构造函数可缺省,也可以由用户定义。它的作用为:z(1)分配对象的数据成员的存储空间;z(2)执行构造函数,一般就是作初始化工作。构造函数的声明和定义z若类中不存在用户定义的构造函数,C+产生缺省构造函数。当建立一个对象时,C+自动调 用这个缺省的构造函数。

2、类 X 的缺省构造函数不带任何参数,也不做具体的初始化工作; 具有如下形式:X X( ) 定义构造函数要注意的问题z1 构造函数的名字必须与类名相同z2 构造函数没有返回值,在声明和定义构造函数时是不能说明它的类型的z3 构造函数的功能是对对象进行初始化,因此在构造函数中只能对数据成员做初始化,这些数据成员一般均为私有成员,在构造函数中一般不做赋初值以外的事情重载构造函数z与一般成员函数一样,C+允许重载构造函数。若类X具有一个或多个构造函数,创建类X的 对象时,C+ 就会根据参数表的不同而调用其中的一个。 构造函数可具有缺省参数z像所有函数一样,构造函数可具有缺省参数。z允许构造函数带缺省参

3、数常用来把对象数组进行初始化。z在使用具有缺省参数的构造函数时,要谨防二义性。拷贝构造函数z构造函数的参数可以是任何类型参数,甚至可以将自己的类的引用作为参数,称它为拷贝构 造函数。形如: XX(const X & obj);z拷贝构造函数有两个含义,首先,它是一个构造函数,当创建一个新对象时,系统自动调用 它;其次,它将参数代表的对象逐域拷贝到新创建的对象中。C+可以为类产生一个缺省的 拷贝构造函数,用户也可以根据自己的需要定义拷贝构造函数。z类对象的拷贝还可能发生在函数参数传递对象和函数返回对象的情况下。 对象的初始化初始化有许多表示法,C语言有三种表示方法:z(1)初始值表的方法

4、这种方法对结构和数组的初始化很适合。z(2)赋值表达式的方法适于简单变量或指针类型的初始化。z(3)表达式表的方法 析构函数z与构造函数对应的是析构函数。析构函数没有返回类型,没有参数,函数名是类名前加“”,它的作用为:z(1)执行析构函数体(一般没有具体的工作);z(2)释放对象的存储空间。z可以使用完全限定名方式显式地调用析构函数;若没有,则在一个对象的作用域结束时,系 统自动调用析构函数。析构函数z析构函数的声明和定义: y类名();定义析构函数要注意的问题z析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载。只是在类对象生命期结束的时候,由系统自动调用。

5、构造函数与析构函数的特点z 1 它们都没有返回值说明,也就是说定义构造函数和析构函数时不需指出类型z 2 它们不能被继承z 3 和大多数c+函数一样,构造函数可以有缺省参数z 4 析构函数可以是虚的(virtual),但构造函数不行z 5 不可取它们的地址z 6 不能用常规调用方法调用构造函数;当使用完全的限定名(带对象名,类名和函数名)时可以调用析构函数z 7 当定义对象时,编译程序自动调用构造函数;当删除对象时,编译程序自动地调用析构函数。构造函数的种类z无参数的构造函数z带参数的构造函数z缺省参数的构造函数z默认构造函数z重载构造函数z拷贝构造函数(引用)带参数的构造函数z建立对象是,常

6、常需要通过传递一定的数据,来对类中的各种数据成员初始化,使得初始化不再一成不变。 缺省参数的构造函数z有些构造函数的使用中,只有特别的情况需要传递参数,一般都使用缺省值 缺省参数的构造函数定义格式z在构造函数声明时,给出各个参数的缺省值z在构造函数定义时,不用也不能给参数服缺省值缺省参数的构造函数注意事项z如果函数所带的参数中,有一部分可以缺省,而有一部分不可缺省,所有取缺省值的参数必须出现在不取缺省值的参数的右边z缺省参数并不只用于构造函数,一般的成员函数,甚至于一般的全局函数都可以使用缺省参数默认构造函数z 1. c+规定,每个类必须有一个构造函数,没有构造函数,就不能创建任何对象z 2.

7、 若未提供一个类的构造函数(一个都未提供),则c+提供一个默认的构造函数,该默认构造函数是个无参构造函数,它仅负责创建对象,而不做任何初始化工作z 3. 只要一个类定义了一个构造函数(不一定是无参构造函数),c+就不再提供默认的默认构造函数。也就是说,如果为类定义了一个带参数的构造函数,还想要无参构造函数,则必须自己定义z 4. 与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的重载构造函数z构造函数可以被重载,C+根据声明中的参数选择合适的构造函数拷贝构造函数z首先,它是一个构造函数,当创建一个新对象时系统自动调用它z其次,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对象中yTdate a(4,2,2003);yTdate b=a; / 或者 Tdate b(a);拷贝构造函数的定义z拷贝构造函数的定义有两种形式:z1 系统产生 y系统为类产生一个缺省的拷贝构造函数z2 用户定义y在类定义中定义一个拷贝构造函数yx(const x &) 其中x为类名构造类成员z类对象作

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论