上机一:类与对象程序设计(2学时)
上机目的
掌握声明类的方法。
掌握类和类的成员的概念以及定义对象的方法。
掌握构造函数和析构函数的使用方法
实验目的
掌握声明类的方法,类和类的成员的概念以及定义对象的方法。
掌握用类和对象编制基本对象的程序的方法。
掌握构造函数和析构函数的使用方法。
上机内容
1.进行类的设计和使用,练习构造函数的重载和析构函数的使用方法;练
习具有不同访问权限的成员的访问方式;
2.测试章节例题,完成教材 P101:3.34,3.35。
题目 1:编写一个基本账户类,成员变量包括:账号,储户姓名,和存款余
额,成员函数包括:存款和取款。编写一个测试程序进行测试。
题目 2:设计一个长方形类,成员变量包括长度和宽度,成员函数除包括计
算周长和计算面积外,还包括用 Set 方法设置长和宽,以及用 get 方法来获取长
方形的长和宽。
实验内容
P101:3.34, 3.35
题目 1:编写一个基本账户类,成员变量包括:账号,储户姓名,和存款余额,成员函数包括:存款和取款。编写一个测试程序进行测试。
思路:
编辑头文件。在弹出的 Account.h 头文件中添加 Account 类的代码。如图
1-5 所示。详细代码如下:
步骤 a:声明程序设计所需要包含的头文件:
#include <iostream.h>
#include <string.h>
步骤 b:根据题目要求:定义账户类:Account 类:
class Account
{
……
7
8
};
步骤 c:在 Account 类中定义成员变量:
private:
long accountNo; //账户
char name[30]; //储户姓名
float money; //账户余额
步骤 d:定义成员函数:
构造函数:
(这些都是在account中的东西(变量))
Account(long a,char *n,float b): accountNo(a),money(b){
strcpy(name,n);
}
析构函数:
~Account(){}
存款成员函数:
void Add(const float x){
money=money+x;
}
取款成员函数:
void Sub(const float x){
money=money-x;
}
输出成员函数:
void Print(void)const{
cout<<"姓名:"<<name<<endl;
cout<<"账户:"<<accountNo<<endl;
cout<<"余额:"<<money<<endl;
}
4)添加源文件代码。在 Account.cpp 文件中添加主程序代码,详细代码如下:
a:测试主程序详解:
#include "Account.h" //包含 Account.h 头文件(此时应该注意“”这个符号应该出现在知道头文件位置的地方当不确定Account在何处时会报错)
void main()
{
//一个萝卜一个坑,对定义的对象类进行赋值初始化定义
Account a1(1000000,"阿斌",100); //定义对象,对象名为 a1,其账号为 1000000,储户姓名为阿斌,账户余额为 100 元
Account a2(1000001,"阿豪",100); //定义对象,对象名为 a2,其账号为 1000001,储户姓名为阿豪,账户余额为 100 元
cout<<"名为阿斌的用户向账户存款 50 元"<<endl;
//此时程序的意思就是对构造的a1对象进行Add函数操作
a1.Add(50); //对象 a1 调用 Add 存款成员函数向账户存款 50 元
//此时程序的意思就是对构造的a1对象进行Print函数操作
a1.Print(); //对象 a1 调用 Print 成员函数输出显式账号、姓名、余额
cout<<endl; //换行
cout<<"名为阿豪的用户从账户取款款 50 元"<<endl;
a2.Sub(50); //对象 a2 调用 Sub 取款成员函数从账户取款 50 元
a2.Print(); //对象 a2 调用 Print 成员函数输出显式账号、姓名、余额
}
完整源码:
#include<iostream>
#include<string>
using namespace std;
class zhanghu {
public:
std::string name;
long int ZH;
int CKYE;
zhanghu(){}
zhanghu(string _name, long int y = 12345678, int z = 100) {
name = _name;
ZH = y;
CKYE = z;
}
int CK(int a) {
CKYE += a;
return CKYE;
}
int QK(int b) {
CKYE -= b;
return CKYE;
}
~zhanghu()
{}
};
int main() {
int n, o, p;
zhanghu m("chenbochao", 12345678, 100);
cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;
cout << "--------------------------" << endl;
cout << "请输入操作" << endl <<"1存款" << endl << "2取款" << endl;
cout << "--------------------------" << endl;
while (scanf("%d", &n) != EOF) {
if (n == 1) {
cout << "请输入存款金额:" << endl;
cin >> o;
cout << "--------------------------" << endl;
m.CK(o);
cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;
cout << "--------------------------" << endl;
}
if (n == 2) {
cout << "请输入取款金额:" << endl;
cin >> p;
cout << "--------------------------" << endl;
m.QK(p);
cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;
cout << "--------------------------" << endl;
}
}
return 0;
}
题目 2:设计一个长方形类,成员变量包括长度和宽度,成员函数除包括计算周长和计算面积外,还包括用 Set 方法设置长和宽,以及用 get 方法来获取长
方形的长和宽
1)创建头文件。在工程主界面左上角点击 File 菜单,在弹出的 New 对话框
中选择 C/C++ Header File 选项,新建头文件命名为 Rectangle.h。用来设计长方形类。
2)编辑头文件。在弹出的 Rectangle.h 头文件中添加 Rectangle 类的代码。
步骤 a:声明程序设计所需要包含的头文件:
#include <iostream.h>
步骤 b:根据题目要求:定义长方形类:Rectangle 类:
class Rectangle
{
……
};
步骤 c:在 Rectangle 类中定义成员变量:
private:
float length; //长
float width; //宽
步骤 d:定义成员函数:
构造函数:
Rectangle(float len = 1, float wid = 1):length(len), width(wid){}
析构函数:
~ Rectangle (){}
//定义函数功能
计算长方形周长的成员函数:
float Perimeter(){
return 2*(length + width);
}
计算长方形面积的成员函数:
double Area() {
return length*width;
}
设置长方形长的成员函数:
void SetLength(float len)
{
length = len;
}
设置长方形宽的成员函数
void SetWidth(float wid)
{
width = wid;
}
获取长方形长的成员函数
float GetLength()
{
return length;
}
获取长方形宽的成员函数
float GetWidth()
{
return width;
}
步骤 e:程序编写示例
3)创建源文件。在工程主界面左上角点击 File 菜单,在弹出的 New 对话框
中选择 C++Source File 选项,新建头文件命名为 Rectangletest.cpp。用来测试长
方形类。
4)编辑源文件。在弹出的 Rectangletest.cpp 头文件中添加测试主程序代码。
a.详细代码:
#include "Rectangle.h" //包含 Rectangle.h 头文件
void main()
{
Rectangle Rec1, Rec2(10, 10);
cout<<"长:"<<Rec1.GetLength()<<" 宽:"<<Rec1.GetWidth()<<endl;
cout<<"周长:"<<Rec1.Perimeter()<<" 面积:"<<Rec1.Area()<<endl<<endl;
Rec1.SetLength(5);
Rec1.SetWidth(8);
cout<<"长:"<<Rec1.GetLength()<<" 宽:"<<Rec1.GetWidth()<<endl;
cout<<"周长:"<<Rec1.Perimeter()<<" 面积:"<<Rec1.Area()<<endl<<endl;
cout<<"长:"<<Rec2.GetLength()<<" 宽:"<<Rec2.GetWidth()<<endl;
cout<<"周长:"<<Rec2.Perimeter()<<" 面积:"<<Rec2.Area()<<endl<<endl;
}
#include<iostream>
using namespace std;
class CF {//定义CF类
public:
int C;
int K;
CF()
{}
//定义函数功能
void set(){
cout << "请输入长度" << endl;
cin >> C;
getchar();
cout << "请输入宽度" << endl;
cin >> K;
}
void get() {
cout << "长度为:" << C << endl;
cout << "宽度为:" << K << endl;
}
int ZC() {
int c;
c = 2 * (C + K);
return c;
}
int MJ() {
int c;
c = C * K;
return c;
}
~CF()
{}
};
int main() {
int a;
int c, d;
CF m;
m.set();
cout << "--------------------------" << endl;
m.get();
cout << "--------------------------" << endl;
cout << "请选择操作:" << endl << "1:求周长" << endl << "2:求面积" << endl;
cout << "--------------------------" << endl;
while (scanf("%d", &a) != EOF) {
if (a == 1) {
cout << "周长是" << m.ZC() << endl;
}
else if (a == 2) {
cout << "面积是" << m.MJ() << endl;
}
}
return 0;
}
思考题
分析总结上述程序设计实现的不足之处,如账户类中当取款金额大于账户原
有余额时,应如何操作?如长方形类结果输出采用函数调用方式是否更为方便?
如若要实现两个长方形对象的面积加和时又该如何进行程序设计?请针对程序
中的不足之处进行完善修改,并思考如何进行功能拓展。