构造函数和析构函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三周实验构造函数和析构函数
实验目的:
1、清楚构造函数的作用,掌握构造函数的声明、定义方法;
2、掌握重载构造函数、带参数构造函数的定义、应用;
3、熟悉用参数列表初始化数据成员的书写方式;
4、清楚析构函数的作用,掌握析构函数的声明、定义方法;
5、熟悉构造函数、析构函数的调用顺序。
实验内容
一、请按要求运行下列程序,并回答相关问题,从中体会构造函数的作用:
#include
using namespace std;
class Time
{
private:
int hour, minute, second;
public:
void disp();
};
void Time::disp()
{
cout< } void main() { Time time; time.disp(); } 问题: (1)查看程序的运行结果,你能发现其中的问题吗? (2)给类增加一个无参数的构造函数,再次运行程序。程序结果有无变化?从中你能体会构造函数具有什么作用? Time::Time() //定义构造函数 { hour=0; minute=0; second=0; } 问题:请用参数列表初始化数据成员的方式改写构造函数,查看程序运行结果有无不同? 二、阅读、运行下列程序,并回答相关问题,进一步熟悉构造函数、析构函数的定义、调用,清楚对象构造、析构的顺序: #include using namespace std; class Test { private: int x; public: Test() { cout<<"对象地址: "< x=0; } ~Test() { cout<<"对象地址: "< } void print() { cout<<"数据成员: x="< } }; void main() { Test obj1,obj2; //创建对象时,自动调用构造函数 obj1.print(); obj2.print(); } 问题: (1)析构函数有什么作用?在书写时,与构造函数有什么相同点和不同点? (2)程序中的this代表什么?this能否写在main()函数中? (3)构造函数、析构函数的调用顺序怎样? 三、输入、运行下列程序代码,并回答相关问题,熟悉构造函数的重载: 问题: (1) A类定义了几个构造函数?它们的参数如何? (2) main( )函数中定义了几个对象,系统分别自动调用了哪个构造函数来创建、初始化相应对象? 四、根据要求,编写程序: 定义一个图书类(Book),该类的数据成员有:书名(bookname)、作者(authors)、页数(pages)、出版社(publishing_house)、价格(price),要求如下: 1、图书的所有属性都是私有的,数据成员的类型根据实际情况来确定; 2、给该类添加相应的getXxx、setXxx函数来获取、设置该类的私有成员; 3、给该类添加适当的构造函数、析构函数来初始化、清理对象; 4、在main()函数定义两本图书: ●《C++程序设计》,谭浩强编著,485页,清华大学出版社,36.00元 ●《吹牛大王历险记》,拉斯伯等编著,149页,天津人民出版社,12.80元 然后将这两个对象的成员信息输出到屏幕上。