辽宁省专升本招生计划:C++的问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 21:18:33
简述构造函数与析构函数的区别与联系。
求专业认识知道解答。

构造函数 析构函数
功能 初始化对象 销毁对象
名称 类名 ~类名
调用时间 创建对象时 对象生命期结束时
参数 可有多个 没有
重载性 可重载 只有一个
返回值 无 无
默认性 可产生默认构造函数通常显示定义 可产生默认析构函数通常不显示定义

析构函数没有参数,不能重载,不能有缺省参数,而构造函数有参数,可以重载,可以有缺省参数
构造函数不能声明为虚函数,而析构函数一般都声明为虚析构函数
构造函数只能由系统自动调用,析构函数一般也是由系统自动调用,但也可以通过类的实例对象显示调用以保证实例的释放
构造函数完成对象的数据成员的内存初始化工作。构造函数在初始化类的实例对象时,首先初始化数据成员(初始化顺序和类中数据成员的声明顺序相同),然后执行构造函数体。
析构函数完成对象内存的释放工作,动态申请的内存需要释放。
编程人员没有为类提供构造函数时,编译系统自动提供一个无参的缺省构造函数,一旦编程人员为类提供了任何一个构造函数(包括拷贝构造函数),编译系统在编译时就不会提供无参的缺省构造函数,析构函数也是如此
单继承派生类构造时,首先构造基类,其次是派生类的数据成员的初始化(顺序和派生类数据成员的声明顺序相同),最后执行派生类的构造函数体
多继承派生类构造时,首先构造虚基类,多个虚基类按照他们被继承的顺序依次构造,其次构造一般基类,多个一般基类按照被继承的顺序构造,然后初始化派生类的数据成员,初始化顺序和派生类数据成员的声明顺序相同,最后执行派生类的构造函数体
构造函数需要初始化的数据,不论是否显示出现在构造函数的初始化参数列表中,都会在该处完成初始化,并且初始化顺序和该数据在初始化参数列表中出现的先后顺序无关,都遵循上面的构造顺序。
析构顺序一般和构造顺序相反
当派生类对象创建时,注意调用派生类构造函数之前先调用基类的构造函数,注意派生类构造函数的写法。
普通对象实例在定义时自动调用构造函数完成对象的初始化,当其出了作用域时自动调用析构函数进行所占用空间的释放
指针对象实例在用new分配指针所指内容时自动调用构造函数完成指针所指内存的初始化,当用delete删除该指针时自动调用析构函数进行指针所指内存的释放