实验报告_实验4构造函数与析构函数(学生学号_姓名)实验目的:1、清楚构造函数的作用,掌握构造函数的声明、定义方法;2、掌握重载构造函数、带参数构造函数的定义、应用;3、清楚析构函数的作用,掌握析构函数的声明、定义方法;4、熟悉构造函数、析构函数的调用顺序;5、掌握拷贝构造函数的定义格式、性质及适用情况。实验内容一、(基础题)请运行下列程序,并按要求回答相关问题问题:(1)查看程序的运行结果,你能发现其中的问题吗?没有初始化。(2)给类增加一个无参数的构造函数,代码如下,再次运行程序。程序结果有无变化?从中你能体会构造函数具有什么作用?有,进行函数的初始化。二、(基础题)阅读、运行下列程序代码,并回答相关问题:问题:(1)A类定义了几个构造函数?它们的参数如何?3个,一个无参数,一个一个参数,一个两个参数。(2)main()函数中定义了几个对象,系统分别自动调用了哪个构造函数来创建、初始化相应对象?3个,A();A(inta);A(inta,intb);三、(基础题)阅读、运行下列程序,并回答相关问题:(1)析构函数有什么作用?在书写时,与构造函数有什么相同点和不同点?在对象消亡时,自动完成清除工作,即在系统释放对象前做一些清理工作,如利用delete运算符释放临时分配的内存。构造函数和析构函数的名字和类名一样,没有返回值,不过析构函数要在前面加上~(2)程序中的this代表什么?this能否写在main()函数中?this代表指针,指向当前对象的地址。不能,this只能在成员函数中使用,全局函数,静态函数都不能使用this。(3)构造函数、析构函数的调用顺序怎样?构造函数调用顺序:按照对象定义的先后顺序调用构造函数,以创建新对象。析构函数调用顺序:先创建的对象后被析构,后创建的对象先被析构。四、(基础题)分析、运行下列程序,并回答相关问题:(1)拷贝构造函数与普通构造函数有什么相同点与不同点?它适用于什么场合?相同点:都是用于初始化。不同的:拷贝构造函数用一个已有的对象来初始化一个被创建的同类对象。适用于:用类的一个对象去初始化另一个对象;用对象作为函数实参传递给形参时,调用拷贝构造函数;如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。适合场合:函数的参数是一个对象,并且是值传递方式;函数的返回值是一个对象,并且是值传递方式;用一个对象初始化另外一个对象。(2)通过显示的各对象地址值,来分析不同对象的构造、析构过程;地址发生改变(3)总结一下对象的构造函数、拷贝构造函数、析构函数的用法。构造函数:用它来定义各种不同的对象,对象数组中,它的每个元素都是对象,也需要调用构造函数来初始化;拷贝构造函数:用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的成员函数;析构函数:析构函数的函数名必须与其类名相同,不能指定返回类型,也不能使用void,没有参数,一个类中只能拥有一个析构函数,所以析构函数不能重载。五、(基础题)根据要求,编写程序:程序代码:#includeiostreamusingnamespacestd;classBook{char*bookname;char*authors;char*pages;char*publishine_house;char*price;public:Book(){}~Book(){}char*getbookname();voidsetBookname(char*bk);char*Authors();voidsetAuthors(char*at);char*Publishine_house();voidsetPublishine_house(char*ph);voidsetPages(char*pe);voidsetPrice(char*pc);char*Pages();char*Price();};voidBook::setBookname(char*bk){bookname=bk;}char*Book::getbookname(){returnbookname;}voidBook::setAuthors(char*at){authors=at;}char*Book::Authors(){returnauthors;}voidBook::setPublishine_house(char*ph){publishine_house=ph;}char*Book::Publishine_house(){returnpublishine_house;}voidBook::setPages(char*pe){pages=pe;}voidBook::setPrice(char*pc){price=pc;}char*Book::Pages(){returnpages;}char*Book::Price(){returnprice;}intmain(){Booka,b;a.setBookname(《C++程序设计》);a.setAuthors(谭浩强编著);a.setPublishine_house(485页);a.setPages(清华大学出版社);a.setPrice(36.00元);b.setBookname(《吹牛大王历险记》);b.setAuthors(拉斯伯编著);b.setPublishine_house(149页);b.setPages(天津人民出版社);b.setPrice(12.80元);couta.getbookname()a.Authors()a.Pages()a.Publishine_house()a.Price()endl;coutb.getbookname()b.Authors()b.Pages()b.Publishine_house()b.Price()endl;return0;}