实验5构造函数和析构函数概述.docx
《实验5构造函数和析构函数概述.docx》由会员分享,可在线阅读,更多相关《实验5构造函数和析构函数概述.docx(11页珍藏版)》请在冰豆网上搜索。
![实验5构造函数和析构函数概述.docx](https://file1.bdocx.com/fileroot1/2023-2/3/5f1ebecd-673b-4f1d-9d79-9e003929ad39/5f1ebecd-673b-4f1d-9d79-9e003929ad391.gif)
实验5构造函数和析构函数概述
实验5构造函数和析构函数概述
实验报告封面
课程名称:
c++程序设计II课程代码:
SS1022任课老师:
卢青华实验指导老师:
卢青华
实验报告名称:
lab5构造函数和析构函数
学生姓名:
陈健宇__
学号:
1540128327
教学班:
KH02
递交日期:
2016-04-08
签收人:
卢青华
我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。
我已经保留了这份实验报告的副本。
申明人(签名):
陈健宇
1实验报告评语与评分:
评阅老师签名:
1
一、实验名称,lab5构造函数和析构函数二、实验日期,2016-
三、实验目的,
1.掌握C++中类和对象的使用方法;
2.熟悉构造函数和析构函数的概念;
3.掌握构造函数和析构函数的定义方法;
4.熟悉拷贝构造函数的概念和定义方法。
四、实验用的仪器和材料,
1.电脑
五、实验的步骤和方法:
1、请按要求运行下列程序,并回答相关问题,从中体会构造函数的作用:
#include
usingnamespacestd;
classTime
{
private:
inthour,minute,second;
public:
voiddisp();
};
voidTime:
:
disp()
{
cout<}
intmain()
{
Timetime;
time.disp();
return0;
}
问题:
(1)查看程序的运行结果,你能发现其中的问题吗,答:
对象TIME的对象成员没有初始化,所以没有值输出
(2)给类增加一个无参数的构造函数,再次运行程序。
程序结果有无变化,
从中你能体会构造函数具有什么作用,
答:
#include
usingnamespacestd;
classTime
{
private:
inthour,minute,second;
public:
voiddisp();
Time();
};
Time:
:
Time()
{
cout<<"构造函数不需调用,在定义对象时自动执行";
}
voidTime:
:
disp(){
cout<}
intmain()
{
Timetime;
time.disp();
return0;
}
(3)在类中增加如下函数定义,在运行程序观察运行结果有什么变化,
Time:
:
Time()//定义构造函数
{
hour=0;
minute=0;
second=0;
}
答:
0小时0分钟0秒
(4)问题:
请用参数列表初始化数据成员的方式改写构造函数,查看程序运
行结果有无不同,
答:
#includeUsingnamespacestd;ClassTime
{
Private:
Inthour,minute,second;Public:
Voiddisp();
Time(inth,intm,ints);};
Time:
:
Time(inth,intm,ints):
hour(h),minute(m),second(s)
{
}
VoidTime:
:
disp()
{
Cout<}
Intmain()
{
Timetime(12,10,10);Time.disp();
Return0;
}
2、阅读、运行下列程序,并回答相关问题,进一步熟悉构造函数、析构函
数的定义、调用,清楚对象构造、析构的顺序。
#include
usingnamespacestd;
classTest
{
private:
intx;
public:
Test()
{
cout<<"对象地址:
"<x=0;
}
~Test()
{
cout<<"对象地址:
"<}
voidprint()
{
cout<<"数据成员:
x="<}
};
intmain()
{
Testobj1,obj2;//创建对象时,自动调用构造函数
obj1.print();
obj2.print();
return0
}
问题:
(1)析构函数有什么作用,在书写时,与构造函数有什么相同点和不同点,答:
相同点:
都不需要调用自动执行,名字都和类名有关系
不同点
构造函数在定义对象时自动执行,析构函数在对象离开所用域时自动执行
构造函数和类名完全相同,但是析构函数名字前面还有一个~这是取反运算符
构造函数可以有参数,析构函数没有参数
(2)构造函数、析构函数的调用顺序是怎么样的,
答:
构造函数的调用顺序和对象定义的顺序一致,哪个对象先定义,哪个对象的构造函数先调用;
析构函数正好相反,哪个对象先定义,那个对象的析构函数后调用
3、定义一个银行帐户类bankAccount,银行帐户具有银行帐号(AccountNo),密码(password),
帐户余额(balance),并具有从帐户取钱(withDraw)和向帐户存钱(deposit)的等功能。
编写main(),创建一个银行帐户,同时模拟存钱取钱操作。
然后为类bankAccount增加构
造函数,构造函数要求有3个参数,分别为账号,密码,余额赋初值。
程序代码
#include
usingnamespacestd;
classbankAccount
{
public:
voidwithdraw();
voiddeposit();
floataaa();
bankAccount();
voidset();
private:
stringaccountno;
floatbalance;
stringpassword;
};
voidbankAccount:
:
set()
{
cout<<"请输入你要创建的银行账号:
"<cin>>accountno;
cout<<"请输入你要设置的密码:
"<cin>>password;
cout<<"你现在的银行账号和密码:
"<cout<<"账号:
"<"<}
bankAccount:
:
bankAccount()
{
stringaccountno="Arc";
stringpaswword="Arc";
balance=0.0;
}
floatbankAccount:
:
aaa()
{returnbalance;}
voidbankAccount:
:
deposit()
{
floata;
cout<<"请输入要存入的金额:
"<>a;
balance=balance+a;
}
voidbankAccount:
:
withdraw()
{
floatb;
cout<<"请输入要提取的金额:
"<>b;
balance=balance-b;
}
intmain()
{
bankAccountaa;
aa.set();
aa.deposit();
cout<<"现在金额为:
"<cout<<"现在金额为:
"<4、构建一个类Book,其中含有2个私有成员qu和price,类中有设置私有成员值的函数。
为类增加构造函数,将私有数据成员初始化为0。
在主函数中定义对象数组,有6个对象,
同时为各个对象的qu成员赋值为1~6,成员price的值由用户输入,在主函数中求出对象
数组中每个元素的qu*price值。
#include
usingnamespacestd;
classBook
{
public:
Book();
intaa();
intbb();
private:
intqu;
intprice;
};
Book:
:
Book(){
qu=0;
price=0;
}
intBook:
:
aa(){
cin>>qu;
returnqu;}
intBook:
:
bb(){
cin>>qu;
returnprice;}
intmain()
{
Bookstu[6];for(i=0,i<=5;i++){
stu[i].aa;
stu[i].bb;
}
Floatc;
for(i=0,i<=5;i++)
{
C=stu[i].aa*stu[i].bb;
Cout<}
}
六、数据记录和计算:
如上
七、实验结果或结论:
本次实验通过实验理解软中断信号机制以及如何通过软中断实现父子进程同步通过实验理解无名管道通信
八、备注或说明:
可写上实验成功或失败的原因,实验后的心得体会、建议等。
九、引用参考文献,即在本实验中所引用的之資料。
例如,1,王月云、陈是莹、童武夫。
1994。
植物生理学实验。
艺軒图书出版社。
286頁。
书中横卧着整个过去的灵魂——卡莱尔
人的影响短暂而微弱,书的影响则广泛而深远——普希金
人离开了书,如同离开空气一样不能生活——科洛廖夫
书不仅是生活,而且是现在、过去和未来文化生活的源泉——库法耶夫
书籍把我们引入最美好的社会,使我们认识各个时代的伟大智者———史美尔斯
书籍便是这种改造灵魂的工具。
人类所需要的,是富有启发性的养料。
而阅读,则正是这种养料———雨果