构造函数与析构函数

构造函数与析构函数

ID:34776488

大小:332.63 KB

页数:21页

时间:2019-03-10

构造函数与析构函数_第1页
构造函数与析构函数_第2页
构造函数与析构函数_第3页
构造函数与析构函数_第4页
构造函数与析构函数_第5页
资源描述:

《构造函数与析构函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、银舟计算机协会技术部学习资料构造函数与析构函数构造函数和析构函数是面向对象程序设计中的一个非常重要的概念,但其实它们也并不是很复杂,要想学习它们,我们就需要了解它们是什么。【对象的生命周期】在这里我们今天先暂时不讨论有关于构造函数和析构函数的相关概念,我们先来认识一下对象的生命周期。众所周知程序中所有的数据,无论是变量、常量都是有生命周期限制的,通常我们使用的最多的就是在主函数中定义某一个变量,从你定义这个变量开始的时候,这个变量也就相当于有了生命,当程序运行完成之后,变量完成了它们的使命,自然就消亡了。这很类似于人类从出生到死亡的过程,但是与人类的生命周期不同的是,数据的

2、生命周期都是可以控制的,我们可以通过在程序中使用一对花括号的方式限定某一个变量的生命周期。既然变量有生命周期,那么与变量相似的对象也同样具有生命周期。那么,对象的生命周期由什么来决定呢?这就是我们今天所要学习的课题。【构造函数初识】构造函数,顾名思义就是用于构造对象的函数。通常,它是和我们的类名重名的,并且由于它的特殊性,它是不需要任何的返回值类型的,也就是我们在定义一个构造函数时,并不需要写明它的返回类型,请记住是不需要写,而不是写成void!在我们使用某一个类,例如Student类定义一个对象std时,实际上Student类调用了它的构造函数完成了这个让人觉得很不起眼的

3、功能。也就是说构造函数是在我们新建类的对象的时候自动执行的。默认的情况下你并不需要去考虑构造函数,如果你不希望它在执行的时候额外的为你做些什么的话,你完全可以把它忽略掉。因此我们在上例中并没有使用构造函数。第21页共21页银舟计算机协会技术部学习资料在刚刚的描述中我们已经知道了构造函数是用于在我们定义对象的时候为我们在内存中生成这个对象的,但其实,构造函数对于我们来说还有另外一种妙用。那就是对私有的成员变量进行赋值!通常的情况下在我们定义类时,C++的编译系统会在不经过你同意的情况下给你建立一个默认的隐藏的构造函数,由于它并不需要完成什么功能,所以这一类的构造函数是不需要任

4、何参数的,没有任何参数的构造函数我们就称之为无参数的构造函数,简称“无参构造函数”。那么有无参构造函数自然就会有“有参构造函数”,它的作用其实不用我说明了,这就是构造函数的妙用所在,它可以在我们建立对象的时候为我们赋值!说了那么多貌似我们还没有真正见过构造函数的样子,那么我们将继续以Student类为案例说明这个构造函数:大家一定很奇怪吧!为什么我在这里只是对构造函数进行了函数声明,但是却没有实现构造函数中的具体功能呢?这就是我的目的,接下来我要教大家如何在类外进行函数的定义,实现函数的内部功能。在类外实现某个类的函数,无论它是不是构造函数还是析构函数,只要它是个函数,它就

5、要遵守以下的规范,前提是你必须是在类外定义它。它的规范如下:函数的返回类型函数所在的类名::函数名(函数参数1,函数参数2,……,函数参数n){函数体中的具体代码}在这里我需要说明这样的前提,函数的返回类型就是你在类中定义的那个函数的返回值类型,如果是构造函数或者是析构函数的话,你必须将这个选项给忽略。例如我们在类外实现Student类的构造函数时,就需要按照如下的写法:第21页共21页银舟计算机协会技术部学习资料其实大家可以看到,这是完全遵照格式的写法,因为构造函数和类的名称本就相同,所以才会出现两个名称都是Student的情况,细细想来这样的安排也并没有什么不妥。和上面

6、类中代码一比较我们也可以清楚的发现,类名和“::”(我们称之为域运算符)后面的内容就是构造函数的函数声明而已。但是我们也可以发现一些不同,是的!构造函数并没有任何返回值,它不需要,也不能要!所以它并不需要像常规的函数一样,在前面加上void作为无返回值的说明,直接而了当!也许这个例子并不能够带给大家多么深刻的体会,那么现在我们可以改造一下这个案例,在Student类中添加一个用于实现打印功能的print函数,那么这个时候Student类就会变成下面的样子:现在大家可以清楚的看到,在Student类中多了一行print函数的声明。接下来,我们就要开始在类外对这个函数进行实现了

7、,它的代码如下:第21页共21页银舟计算机协会技术部学习资料这个时候我们再和前面的构造函数的实现相比,我们可以看到前面多了一个void声明,那是因为我们在声明print函数的时候已经把这个函数声明成了void类型的。里面具体实现它功能的代码我想大家就不用再看了。那么这样我们可以对有参构造函数和无参构造函数进行功能上的总结:当我们需要为类中的数据成员设定默认值时,我们可以定义无参构造函数,当我们需要对类中的数据成员进行赋值时,那么我们可以使用有参构造函数。那么如何在定义对象的时候使用有参构造函数或者是无参构造函数呢?

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。