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

匿名 (未验证) 提交于 2019-12-03 00:32:02

实验目的和要求

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

实验内容

  1. "font-size:18px;">//sy3_1.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. int
  7. void
  8. private
  9. int
  10. int
  11. //ERROR
  12. return

运行结果如下:


修改程序如下:

  1. "font-size:18px;">//sy3_1.cpp
  2. usingnamespace
  3. class
  4. public
  5. int
  6. void
  7. private
  8. int
  9. int
  10. return

正确程序运行结果如下:



2、调试下列程序。

  1. "font-size:18px;">//sy3_2.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. intint
  7. intreturn
  8. intreturn
  9. private
  10. int
  11. int
  12. "p3=("<<p3.getx()<<","<<p3.gety()<<")\n"
  13. return

在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增加下述语句:

cout<<"Constructor is called.\n";

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

修改程序如下:

  1. "font-family:SimSun;font-size:18px;">//sy3_2.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. intint
  7. intreturn
  8. intreturn
  9. private
  10. int
  11. int
  12. "p3=("<<p3.getx()<<","<<p3.gety()<<")\n"
  13. return


原程序运行结果如下:


修改后的程序运行结果如下:


输出结果解释:


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

在主函数体内,添加下列说明语句:

  1. //sy3_2.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. intint
  7. intreturn
  8. intreturn
  9. private
  10. int
  11. int
  12. "p3=("<<p3.getx()<<","<<p3.gety()<<")\n"
  13. return
运行结果如下:


调试程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。

出现的现象:


为什么:因为在类中没有定义不带参数和带一个参数的构造函数;

如何解决:

  1. //sy3_2.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. intint
  7. intreturn
  8. intreturn
  9. private
  10. int
  11. int
  12. "p3=("<<p3.getx()<<","<<p3.gety()<<")\n"
  13. return


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

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

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

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

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

原程序如下:

  1. "font-family:SimSun;font-size:18px;">//程序Li3_11.cpp
  2. //new和delete的用法
  3. usingnamespace
  4. class
  5. public
  6. int
  7. private
  8. int
  9. Heapclass::Heapclass(int
  10. cout<<
  11. cout<<
  12. int
  13. pa1=new
  14. pa2=new
  15. pa3=new
  16. if
  17. return
  18. cout<<
  19. delete
  20. delete
  21. delete
  22. return
原程序输出结果如下:


解释:pa1、pa2、pa3中是2个指向类Heapclass的对象指针,在能够赋给它们足够内存的情况下,使用运算符new给它们赋值,同时对它们所指向的对象进行初始化。使用delete释放这三个指针所指向的对象,由于不能够赋给pa1、pa2或pa3足够内存,所以输出“Out of Memory”。

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

  1. //sy3_4.cpp
  2. #include<iostream>
  3. usingnamespace
  4. class
  5. public
  6. doubledouble
  7. double
  8. return
  9. double
  10. return
  11. double
  12. return
  13. double
  14. return
  15. voiddoubledouble
  16. void
  17. "length:"<<len<<<<"width:"
  18. private
  19. int
  20. int
  21. "q的矩形尺寸:"
  22. "h的矩形尺寸:"
  23. "h的周长:"
  24. "h的面积:"
  25. "h的长度:"
  26. "h的宽度:"
  27. "修改后的矩形的尺寸:"
  28. return
运行结果如下:



分析与讨论

使用运算符new分配内存,调用构造函数来进行初始化。

实验总结

的定义格式和类中成员的访问权限也更加的熟悉,同时还掌握了拷贝函数的使用方法,虽然对知识点的掌握不是很牢固,在编写程序时因为对知识点不能熟练运用,会导致不知道该怎么去构造这个程序,头脑里没有清晰地思路,在写程序前先不要着急写,应该先弄清楚所写得程序要运用到哪些基本知识,自己如果对某个知识不熟悉就得巩固一下,再按照题目要求弄清这个程序的思路,我相信通过长期反复的训练最终也会熟能生巧。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!