C++中构造函数与析构函数的使用
发布时间:2021-06-06
发布时间:2021-06-06
!""中构造函数与析构函数的使用
张
4宿州教育学院
$摘
勇
5678889
安徽 宿州
要%在面向对象的程序设计中,当由一个类创建该类的一个对象时实际上是一个由一般到特殊、
一个抽象到具体的过程,这个过程就象简单类型的数据结构初始化一个数据对象一样,但由于类的复杂性这一过程在,--或其他面向对象的程度设计中必需使用构造函数进行实现,本文将介绍,--中构造函
数的具体使用方式及其使用技巧。
$关键词%构造函数$中图分类号%./0*0
拷贝构造函数
析构函数
$文章编号%!""*—230’)&""’+"0—"!"#—"&
若类中含有指针变量,这两个函数注定将出错。对于使用,--编写程序的程度员,如果要编写构造函数、析构函数与赋值函数,那么必需认真对待,否则会使程序的结构性、合理性达不到要求。作为比,更先进的语言,,--提供了更好的机制来增强程序的安全性。,--编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程度员的大忙。但是程序通过了编译检查并不表示错误已经不存在了,级别高的错误通常隐藏得很深,想找到是不容易的,根据经验,不少难以察觉的程序错误是由于变量没有被正确初始化或清除造成的,而初始化的清除工作很容易被人遗忘。
$文献标识码%1
在,--中构造函数的作用就是在对象被创建
时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征。而析构函数的作用几乎正好相反,它用来完成对象被删除前的一些清理工作,也就是专门的扫尾工作。
构造函数、析构函数与赋值函数是每个类最基本的函数。它们太普通以致让人容易麻痹大意,其实这些貌似简单的函数在使用时要特别注意以免造成不必要资源浪费和产生意想不到的错误。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数)包含一个拷贝构造函数,其它的称为普通构造函数+。对于任意一个类.,如果不想编写上述函
数,,--编译器将自动为.产生四个缺省的函数,E<A5F;<AF?在设计,--语言时充分考虑了这个问题如:并很好地予以解决:把对象的初始化工作放在构造
.)4567+8&缺省的无参数构造函数
.)95:;<.=<+8&缺省的拷贝构造函数>.)4567+;&缺省的析构函数.=5?@AB<@C)95:;<.=<+8&缺省的赋值函数这不禁让人疑惑,既然能自动生成函数,为什么还要程序员编写这些函数D原因如下:一、如果使用“缺省的无参数构造函数”和“缺省的析构函数”,等于放弃了自主“初始化”和“清除”的机会,因为这两个缺省的函数实际是没有做任何操作。这对于复杂的类和其对象是不合适的,因为不恰当的初始化和不能对资源的及时回收会大大浪费系统的有限资源。二、“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘
"$收稿日期%&""’(’(!$作者简介%张勇)!*##(
函数中,把清除工作放在析构函数中。当对象被创建时,构造函数被自动执行。这下就不用担心忘了对象的初始化和清除工作。构造函数与析构函数的名字不能随便起,必须让编译器认得出才可以被自动执行。E<A5F;<AF?的命名方法既简单又合理:让构造函数、析构函数与类同名,由于析构函数的目的与构造
’以示区别。除了名字外,构函数的相反,就加前缀‘!造函数与析构函数的另一个特别之处是没有返回值类型,这与返回值类型为4567的函数不同。构造函数与析构函数的使命非常明确,就是对象的初始化与清除。如果它们有返回值类型,那么编译器将不知所措。为了防止节外生枝,干脆规定没有返回值类型。
下面以类E<A6:G的设计与实现为例,阐述一些程序员容易忽略的问题。E<A6:G的结构如下:
+,男,安徽省宿州教育学院数理系教师。
!"#
下一篇:火灾漏电报警系统设计方案