当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第6章 MFC基础知识 >  6-2 C++的基本知识 >  6-2-5 构造函数和析构函数

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

6-2-5 构造函数和析构函数在线视频

6-2-5 构造函数和析构函数

下一节:6-2-6 重载

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

6-2-5 构造函数和析构函数课程教案、知识点、字幕

我们开始来介绍构造函数和析构函数

C++中有几类特殊的函数

这些函数决定了如何建立、初始化、拷贝及删除对象

构造函数和析构函数是其中最重要的两种

和一般的成员函数一样

构造函数和析构函数既可以在类的内部声明和定义

也可以在类的内部声明

在类的外部定义

如果一个类含有构造函数

则在建立该类的对象时就要调用它

而如果一个类含有析构函数

则在销毁该类的对象时调用它

那首先我们来了解一下构造函数

对象在生成过程中通常需要初始化变量

或分配动态的内存

以便我们能够操作

或者防止在执行过程中返回意外结果

构造函数是一种特殊的成员函数

它主要用来为对象分配内存空间

对类的数据成员进行初始化

并执行对象的其他内部管理操作

构造函数的特点是

构造函数的名字和它所在的类的名字相同

这点很重要

一下就能够识别出这个函数是不是构造函数

因为构造函数的名字和它所在的类的名字是一样的

当定义该类的对象时

构造函数完成对此对象的初始化

构造函数它可以接收参数并允许重载

好了我们这里又出现了新的名词叫“重载”

关于重载的问题

我们后面会介绍

当一个类含有多个构造函数时

编译程序为了确定调用哪一个构造函数

需要把对象中使用的参数

和构造函数的参数表进行比较

这个过程与在普通的函数重载中进行选择的过程相同

大家来看一下这个例子

定义了一个class CRectangle

定义了私有的宽度和高度

定义了这个

这个就是大家看到的这个函数的名字

跟类的名字一样

说明这个函数

然后在这里面定义了一个area

同样直接有函数体在里面

这实际上是内联函数

那这个构造函数的定义在哪儿呢

我们看在后面

这个前面是类名

后面这个是构造函数的函数名

因为它呢

两个名字是一样的

当中用双冒号分隔

这个大家已经很熟悉了

然后a和b分别赋给width和height

在主函数里面我们仍然是定义了rect

这个CRectangle的对象

然后把5和6分别赋给a和b

实际上就是赋给了width和height

然后在执行rect.area这个函数的时候

求出了width和height相乘的积

所以它的值也是30

那这个例子跟前面例子不一样的地方就是

定义了一个构造函数

程序一运行就初始化它

这就是构造函数的使用

那这里面大家看得很清楚了

构造函数的名字和它所在的类的名字相同

关于构造函数有几个问题要跟大家讨论一下

第一

构造函数跟普通函数一样也可以有参数

但不能有返回值

这是因为构造函数通常是在定义一个新的对象时调用

它无法检查构造函数的返回值

第二

在实际应用中

如果没有给类定义构造函数

则编译系统将为这个类生成一个缺省的构造函数

该缺省的构造函数没有参数

只是简单地把对象中的每一个实例变量初始化为0

第三

构造函数可以有缺省的参数

大家看下面的程序段

就体现了构造函数的缺省参数问题

大家看下面定义了一个类叫My_class

它的构造函数也叫My_class

因为要跟类的名字一样

但构造函数里面直接给了float x=3.5

实际上就是在构造函数的定义中带了缺省的参数x和y

第四

构造函数也可以没有参数

比如下面定义的类My_class中的构造函数就没有参数

大家看My_class这里是空的括号

没有参数

该类的构造函数执行的功能

大家看在屏幕上显示的是NO PARAMETER这么一句话

我们来看一下代码

在这个类里面定义了构造函数My_class

My_class它执行的过程就是cout输出NO PARAMETER

那谁在调My_class呢?

我们在主函数里面调用了My_class

所以程序一运行就调用它

输出的是NO PARAMETER

这个时候大家看到My_class这个构造函数这个括号是空的

没有参数

这也就是说构造函数也可以没有参数

我们接着来了解一下析构函数

析构函数也是类中的特殊成员函数

与定义它的类具有相同的名字

那大家说了那构造函数的名字跟类相同

析构函数的名字也跟类相同

那构造函数跟析构函数不就变成一个了么

不是这样的

虽然它的名字相同

但析构函数要在函数名字前面加上一个波浪号

析构函数它没有参数

也没有返回值

而且也不能重载

因此一个类中只能有一个析构函数

析构函数执行与构造函数相反的操作

通常用于释放分配给对象的存储空间

当程序超出类对象的作用域的时候

或者当对一个类指针使用运算符delete时

系统将自动调用析构函数

和构造函数一样

如果在类的定义中不定义析构函数

编译系统将为之产生一个缺省的析构函数

对于大多数类来说

缺省的析构函数就能满足要求

如果在一个对象完成其操作之前还需要做一些内部处理

则应该定义析构函数

下面我们来看一下我们定义的这个析构函数

大家看这个类的名字叫做My_class

My_class里面这里面有一个char的指针

还有一个整型的MaxLen maximumlen

这里定义了两个参数

一个是char类型指针

一个是int类型的MaxLen

那这里定义的这两个变量都是属于private变量

因为缺省的没写出private

然后在public这个地方定义了My_class

大家这时候一眼就可以看出来这个My_class是构造函数

因为它跟类的名字是一样的

又定义了一个My_class

这里加了一个波浪号

这就是析构函数

在构造函数里面创建了一个char的数组

返回一个指向char的指针

在析构函数里面删除了刚才创建的指针

用delete

那所以这边一个是用new创建

一个是delete

这两个是互逆的操作

上面的例子是析构函数跟构造函数最常见的用法

即在构造函数中用运算符new为字符串分配存储空间

最后在析构函数中用delete释放已分配的存储空间

所以这两个操作是互逆的操作

析构函数也可以在类定义的内部声明

而在类定义的外部定义

例如

上面的析构函数My_class在类定义的外部定义如下

前面是类的名字

后面是函数的名字

这时候大家注意破浪号别忘了

否则的话就变成构造函数

它的功能就是delete str

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-7-1 概述

--7-1-1

--7-1-2

-7-2 按钮控件及其应用

--128B12447816EEF99C33DC5901307461

-7-3 按钮控件及其应用

--7-3

-7-4 静态控件

--7-4

-7-5 列表框控件

--7-5-1

--7-5-2

-7-6 编辑框控件

--7-6

-7-7 组合框控件

--7-7

-7-8 对话框通用控件

--7-8-1

--7-8-2

-讲义源代码

--html

第8章 在MFC中创建应用程序的资源

-8-1&2 资源的应用以及菜单资源的使用

--8-1-1

--8-1-2

-8-3 快捷菜单的创建及其应用

--8-3

-8-4 加速键资源的创建及其使用

--8-4

-8-5 工具条资源的创建及其使用

--8-5

-8-6 字符串资源的使用

--8-6

-8-7 位图资源的创建及其使用

--8-7

-课堂示例源代码

--html

-第一次作业内容及要求

--html

--第一次作业及答题链接--作业

第9章 单文档与多文档

-9-1 概述

--9-1

-9-2 Doc/View框架的主要成员

--Video

-9-3 文档操作中的一些重要概念

--Video

-9-4 SDI编程实例

--Video

-9-5 MDI编程实例

--9-5-1

--9-5-2

-课堂示例源代码

--html

-第二次作业内容及要求

--html

--第二次作业及答题链接--作业

第10章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

6-2-5 构造函数和析构函数笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。