实验一类与对象.docx
《实验一类与对象.docx》由会员分享,可在线阅读,更多相关《实验一类与对象.docx(16页珍藏版)》请在冰豆网上搜索。
![实验一类与对象.docx](https://file1.bdocx.com/fileroot1/2023-6/1/c53aa453-eb21-44ee-b7c8-6b3e33e74e11/c53aa453-eb21-44ee-b7c8-6b3e33e74e111.gif)
实验一类与对象
实验报告
课程名称面向对象程序设计
实验名称类与对象
专业通信工程
班级通信1101
学号
姓名
指导教师乔汇东
2012年10月17日
实验一类与对象
实验名称类与对象评分
实验日期2012年10月17日指导教师乔汇东
姓名皮锋专业班级通信工程学号************
一、实验目的
(1)掌握类与对象定义与使用方法。
(2)理解类与对象的基本关系。
(3)了解封转原则应用的方式。
(4)掌握成员函数的基本使用方法。
(5)掌握构造析构函数的使用方法。
二、实验平台
PC机一台,软件开发环境VC6.0++;
三、实验内容
1、定义一个类实现银行帐户的概念,账户应包括有数据成员"帐号"、"存款余额"和”账户密码”等。
在main函数中创建3个账户对象,分别存入一定的现金,然后显示各个账户的存款余额。
2、把数据成员"帐号"和"存款余额"定义为private,给银行账户这个类添加公有的成员函数"存款"、"取款"、"查询余额"和”查询帐号”。
main()函数中创建3个账户,调用成员函数进行一些存取款的操作。
3、编辑代码实现用户正确输入账号和密码能显示该账户余额的功能。
4、为类添加构造和析构函数,要求构造函数能对数据成员进行初始化,并在每个账户创建时给出提示,比如每个账号创建时显示“新账户建立”字样,析构函数要求能在账户对象释放时显示账户中所余金额。
四、实验记录(记录实验各步骤的代码,实验各步骤观察得到的结果)
1.定义一个类实现银行帐户的概念
#include
usingnamespacestd;
classaccount
{
public:
intuser;
doublebalance;
intcipher;
};
intmain()
{
accounta,b,c;
a.balance=100;
b.balance=200;
c.balance=300;
cout<<"a账户的存款余额:
"<cout<<"b账户的存款余额:
"<cout<<"c账户的存款余额:
"<system("PAUSE");
return0;
}
程序执行结果:
说明:
程序中建立了3个账户a,b,c,分别存入了100元,200元,300元,所以执行结果的存款余额分别为100元,200元,300元。
2.#include
usingnamespacestd;
classaccount
{
private:
intuser;
doublebalance;
public:
voidsave(doublex)//存款
{
balance=0;
balance=balance+x;
}
voiddraw(doublex)//取款
{
balance=balance-x;
}
intqueryuser(intm)//查询用户
{
returnuser=m;
}
voidquerymoney()//查询余额
{
cout<<"用户"<"<}
};
intmain()
{
accounta,b,c;
a.queryuser(10000);
b.queryuser(10001);
c.queryuser(10002);
a.save(1000);
b.save(2000);
c.save(3000);
a.draw(300);
b.draw(200);
c.draw(100);
a.querymoney();
b.querymoney();
c.querymoney();
system("PAUSE");
return0;
}
执行程序结果:
说明:
程序中创建了3个账户10000,10001,10002,且分别存入了1000元,2000元,3000元,取出了300元,200元,100元。
所以得出以上运行结果。
3.#include
usingnamespacestd;
classaccount
{
private:
intuser;
doublebalance;//余额
public:
intcipher;//账户密码
voidsave(doublex)//存款
{
balance=0;
balance=balance+x;
}
voiddraw(doublex)//取款
{
balance=balance-x;
}
intqueryuser(intm)//查询用户
{
returnuser=m;
}
voidquerymoney()//查询余额
{
cout<<"用户"<"<}
intjudge(int&m)
{
intkey;
if(m==user)
{
cout<<"请输入密码:
"<cin>>key;
if(key==cipher)
{
querymoney();
return1;
}
else
cout<<"密码输入错误!
"<return1;
}
else
return0;
}
};
intmain()
{
accounta,b,c;
a.queryuser(10000);
b.queryuser(10001);
c.queryuser(10002);
a.cipher=1111;
b.cipher=2222;
c.cipher=3333;
a.save(1000);
b.save(2000);
c.save(3000);
a.draw(300);
b.draw(200);
c.draw(100);
intx;
cout<<"请输入您的账户名:
"<cin>>x;
intpw=a.judge(x)+b.judge(x)+c.judge(x);
if(pw==0)
{
cout<<"用户不存在"<}
system("PAUSE");
return0;
}
程序执行结果:
说明:
程序中账户10002的设置密码是33333,密码输入正确,且第三题的用户存取款和第二题一样,所以程序输出正确的运行结果。
说明:
程序中的三个用户名分别是10000,10001,10002,而输入的用户名为10004,是不存在的,所以不能显示用户的存款余额。
说明:
程序中设置的用户10000的密码为1111,而输入的密码为2222,密码输入有误,根据程序要求,所以不能显示用户的存款余额。
4.#include
usingnamespacestd;
classaccount
{
private:
intuser;
doublebalance;//余额
public:
intcipher;//账户密码
account(intuser=0)
{
cipher=0;
balance=0;
cout<<"新账户"<"<}
~account()
{
cout<<"账户号"<"<cout<<"账户"<"<}
voidsave(doublex)//存款
{
balance=balance+x;
}
voiddraw(doublex)//取款
{
balance=balance-x;
}
intqueryuser(intm)//查询用户
{
returnuser=m;
}
voidquerymoney()//查询余额
{
cout<<"用户"<"<}
intjudge(int&m)
{
intkey;
if(m==user)
{
cout<<"请输入密码:
"<cin>>key;
if(key==cipher)
{
querymoney();
return1;
}
else
cout<<"密码输入错误!
"<return1;
}
else
return0;
}
};
intmain()
{
accounta(10000),b(10001),c(10002);
a.queryuser(10000);
b.queryuser(10001);
c.queryuser(10002);
a.cipher=1111;
b.cipher=2222;
c.cipher=3333;
a.save(1000);
b.save(2000);
c.save(3000);
a.draw(300);
b.draw(200);
c.draw(100);
intx;
cout<<"请输入您的账户名:
"<cin>>x;
intpw=a.judge(x)+b.judge(x)+c.judge(x);
if(pw==0)
{
cout<<"用户不存在"<}
system("PAUSE");
return0;
}
程序执行结果:
说明:
程序中用构造函数对每个用户进行了初始化且对用户建立进行了提示,用析构函数对账户释放时显示余额,用户10002的密码是3333,输入正确,所以得如上图所示结果。
五、实验结论与体会
实验中程序按要求由简到繁一步一步实现要执行的功能。
在第一步中,我建立了三个账户,并在main函数中显示三个账户的存款余额,但是在main函数中,首先我没有写accounta,b,c;着句话,所以程序编译时出现错误:
errorC2065:
'a':
undeclaredidentifier和errorC2228:
leftof'.balance'musthaveclass/struct/uniontype。
经过仔细检查,我才在main函数中用account定义了3个对象。
在第二步中,把数据成员"帐号"和"存款余额"定义为private,但是在main函数中没有注意余额balance为private,仍然用a.balance来实现现金的存入,使得编译通不过,后来才在类中使用了存款函数voidsave(doublex)和取款函数voiddraw(doublex),并在main函数中用a.save(1000);a.draw(300)来实现存取款功能。
在第三步中,要求实现用户正确输入账号和密码能显示该账户余额的功能,所以必须在类中添加judge函数判断账号和密码是否正确,在judge函数中用ifelse的嵌入式结构,先判断账号,再判断密码,但是不管第二个用户是否存在,都输出“用户不存在”,程序在逻辑上存在问题,不能实现想要的功能,在同学的帮助下,才在main函数中加了一句
intpw=a.judge(x)+b.judge(x)+c.judge(x);
if(pw==0)
{
cout<<"用户不存在"<}
这样才实现了想要的功能。
在第四步中,为类添加构造和析构函数。
首先我把构造函数写成account(intuser=0,intcipher=0),然后在main函数中用accounta(10000,1111),b(10001,2222),c(10002,3333);
但执行时总是显示用户不存在,仔细检查才发现intcipher;不是private,之后把构造函数改成account(intuser=0),并在main函数中用accounta(10000),b(10001),c(10002);进行账户的创建。
通过实验,我知道要做好C++实验不仅必须按步骤,要理解每一步的含义以及作用,不能不经思考的敲一堆代码,然后去编译,而且要对程序执行的功能有一个整体的轮廓。
不经思考的敲代码对付小程序还行,但对于大一点的程序就束手无策了。
学习C++不能靠记书上的函数等,必须理解函数的作用以及用法,这样才能活学活用。