实验3 构造函数与析构函数

实验目的和要求:

1.熟悉类的定义格式和类中成员的访问权限。

2.构造函数与析构函数的调用时机与顺序。

3.掌握对象的定义以及对象的初始化的时机与方法。

实验内容:

1.下面程序sy3-1.cpp中用ERROR标明的语句有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。


错误的运行结果如下图:

 

改正后的程序如下:

”cout<<a2.a<<endl;//ERROR”改为“a2.print();”

正确运行结果:

 

2.调试下列程序:


在该程序中,将TPoint类的两个带有参数的构造函数进行修改,在函数体内增添下述语句:cout<<"Constructor is called.\n";

1)写出程序的输出结果。

加入语句为:

 

 

输出结果为:


2)按下列要求进行调试:

在主函数体添加下列说明语句;

调试程序中会出现什么现象?为什么?如何解决?

调试中出现的现象:

 

  原因:没有定义该类型的构造函数

解决办法:将TPoint(int x,int y)改为TPoint(int x=0,int y=0) ; 即在运行过程中,TPoint p1(4,9)和TPoint p4,p5(2);调用了构造函数,而TPoint p2(p1)和TPoint p3=p2是使用了拷贝构造函数。   

最终运行结果:


3.对教材中Li3_11.cpp的主函数做如下修改:

1)将Heapclass *pa1,*pa2 改为Heapclass *pa1,*pa2,*pa3;

2)在语句pa2=new Heapclass 后增加语句pa3=new Heapclass(5);

3)将语句 if(!pa1||!pa2) 改为if(!pa1||!pa2||!pa3)

4)在语句delete pa2 后增加语句delete pa3;

写出程序的输出结果,并解释输出结果。

依题意知 程序如下:


运行结果如下:


结果解释:首先使用指针指向新创建的对象,再利用构造函数输出结果,最后调用析构函数实现再次输出。

4、请定义一个矩形类(Rectangle),私有数据成员为矩形长度(len)和宽度(wid),无参构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形的周长、求矩形的面积、取矩形的长度和宽度、修改矩形的长度和宽度为对应形参的值、输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为“length:长度,width:宽度”。(sy3_4.cpp)

依题意 程序如下:


运行结果:



分析与讨论

     1、类中私有成员的访问权限;

 答:只有类中的函数才能访问类中私有成员。

    2、构造函数和析构函数的调用顺序;

 答:在对象创建时,先用构造函数对其进行初始化,在程序结束后用析构函数释放由构造函数分配的内存,而且析构函数的执行顺序与构造函数的执行顺序刚好相反。

    3、何时进行对象初始化?如何进行?

 答:  一般对象:在对象的创建时对其进行初始化,可以用构造函数或者用拷贝构造函数进行初始化。

              堆对象:用new进行分配空间,再调用构造函数进行初始化。

 实验总结

通过在本次实验的过程中对析构函数的调用,因此也

对析构函数的调用

有了进一步的了解,同时掌握了对象的定义及其初始化的方法,对有参和无参的构造函数也有了更深的了解,虽然实验过程中难免会遇到一些小问题,但是通过分析与讨论,最终也解决了实验中所出现的问题,实验中,对于基础理论知识还是不太扎实,所以对于一些问题还只能从书上寻找答案,在今后的学习过程中还需要稳扎稳打才能学好这门课。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值