> 文章列表 > 西安石油大学C++上机实验 上机一:类与对象程序设计(2学时)

西安石油大学C++上机实验 上机一:类与对象程序设计(2学时)

西安石油大学C++上机实验 上机一:类与对象程序设计(2学时)

上机一:类与对象程序设计(2学时)

上机目的

  1. 掌握声明类的方法。
  2. 掌握类和类的成员的概念以及定义对象的方法。
  3. 掌握构造函数和析构函数的使用方法

实验目的

掌握声明类的方法,类和类的成员的概念以及定义对象的方法。

掌握用类和对象编制基本对象的程序的方法。

掌握构造函数和析构函数的使用方法。

上机内容

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;
}

思考题

分析总结上述程序设计实现的不足之处,如账户类中当取款金额大于账户原
有余额时,应如何操作?如长方形类结果输出采用函数调用方式是否更为方便?
如若要实现两个长方形对象的面积加和时又该如何进行程序设计?请针对程序
中的不足之处进行完善修改,并思考如何进行功能拓展。