第三周实验构造函数和析构函数
实验目的:
1、清楚构造函数的作用,掌握构造函数的声明、定义方法;
2、掌握重载构造函数、带参数构造函数的定义、应用;
3、熟悉用参数列表初始化数据成员的书写方式;
4、清楚析构函数的作用,掌握析构函数的声明、定义方法;
5、熟悉构造函数、析构函数的调用顺序。
实验内容
一、请按要求运行下列程序,并回答相关问题,从中体会构造函数的作用:
#include<iostream>
using namespace std;
class Time
{
private:
int hour, minute, second;
public:
void disp();
};
void Time::disp()
{
cout<<hour<<"小时"<<minute<<"分钟"<<second<<"秒"<<endl;
}
void main()
{
Time time;
time.disp();
}
问题:
(1)查看程序的运行结果,你能发现其中的问题吗?
(2)给类增加一个无参数的构造函数,再次运行程序。
程序结果有无变化?从中你能体会构造函数具有什么作用?
Time::Time() //定义构造函数
{
hour=0;
minute=0;
second=0;
}
问题:请用参数列表初始化数据成员的方式改写构造函数,查看程序运行结果有无不同?
二、阅读、运行下列程序,并回答相关问题,进一步熟悉构造函数、析构函数的定义、调用,清楚对象构造、析构的顺序:
#include<iostream>
using namespace std;
class Test
{
private:
int x;
public:
Test()
{
cout<<"对象地址: "<<this<<", 构造函数被调用"<<endl;
x=0;
}
~Test()
{
cout<<"对象地址: "<<this<<", 析构函数被调用"<<endl;
}
void print()
{
cout<<"数据成员: x="<<x<<endl;
}
};
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元
然后将这两个对象的成员信息输出到屏幕上。