实验二 类与对象
实验二类与对象
一、实验目的
1、学习类与对象的定义,掌握类与对象的使用方法。
2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。
3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。
4、掌握用指针和引用向函数传递参数。
5、掌握静态数据成员和静态成员函数的使用。
6、理解友元与友元函数的作用与使用方法。
二、实验内容
1、下面是一个计算器类的定义,请完成该类成员函数的实现。
class Counter
{
public:
Counter(int number);
void increment(); //给原值加1
void decrement(); //给原值减1
int getValue(); //取得计数器值
int print(); //显示计数
private:
int value;
};
#include
class count
{
public:
counter(int number);
void increment();
void decrement();
int getvalue(int);
int print();
private:
int value;
};
void count::increment()
{
int a=value+1;
}
void count::decrement()
{
int b=value-1;
}
int count::getvalue(int s)
{
value=s;
return 0;
}
int count::print()
{
cout< cout< return 0; } void main() { count s; s.getvalue(5); s.print(); } //2、根据注释语句的提示,实现类Date的成员函数。#include class Date { public: void printDate();//显示日期 void setDay(int d);//设置日的值 void setMonth(int m);//设置月的值 void setYear(int y);//设置年的值 private: int day,month,year; }; void Date::printDate() { cout< } void Date::setDay(int d) { day=d; } void Date::setMonth(int m) { month=m; } void Date::setYear(int y) { year=y; } int main() { Date testDay; testDay.setDay(5); testDay.setMonth(10); testDay.setYear(2014); testDay.printDate(); return 0; } 3、建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double 变量中。在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。 #include class cylinder { private: double r; double h; double v; public: ~cylinder(); double vol(); cylinder(double,double); }; cylinder::cylinder(double m,double n):r(m),h(n) {} cylinder::~cylinder() { cout<<"Constructor called"< } double cylinder::vol() { double v; v=3.14*r*r*h; return v; } double main() { cylinder a(1.1,2.2); cout<<"体积="< return 0; } 4、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price初始化为qu的10倍。显示每个对象的qu*price值。 #include class book { private: int qu; int price; int s; public: book(int p,int q):qu(p),price(q) {} void print() { cout< } }; int main() { book a(1,10); a.print(); book b(2,20); b.print(); book c(3,30); c.print(); book d(4,40); d.print(); book e(5,50); e.print(); return 0; } 5、修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。 #include class book { private: int qu; int price; int s; public: book(int p) { qu=p; price=qu*10; } int print() { return(qu*price); } }; int main() { book a[5]={1,2,3,4,5}; book *p; p=&a[4]; for(int i=4;i>=0;i--) { cout< p--; } return 0; } 6、构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。构造函数含3个参数:字符数组na[]及q、p。当定义Stock 的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。成员函数print()使用this指针,显示对象内容。 #include #include class Stock { char stockcode[10]; int quan; double price; public: Stock(char na[10],int q=1000,double p=8.98); void print(); }; Stock::Stock(char na[10],int q,double p) { strcpy(stockcode,na); quan=q; price=p; } void Stock::print() { cout< } void main() { Stock m("sdgjgj",798,9.89); m.print(); Stock n("sljf"); cout<<"默认:"; n.print(); } 7、参考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将 新建的类命名为Rect。 class Rect { public: int Area_int(); double Area_double(); Rect(double length,double width); Rect(int length,int width); virtual ~Rect(); private: int nLength; int nWidth; double dLength; double dWidth; }; 【要求】 (1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。 (2)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。 (3)体现对象的构造和析构过程。例如,在构造函数中用cout<<”I am the constructor!”< (4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。 #include class Rect { public: int Area_int(); double Area_double(); Rect(double length,double width); Rect(int length,int width); virtual ~Rect(); private: int nLength; int nWidth; double dLength; double dWidth; }; int Rect::Area_int() { int s; s=nLength*nWidth; cout<<"int的长方形的面积:"< return 0; } double Rect::Area_double() { double k; k=dLength*dWidth; cout<<"double型的长方形的面积: "< return 0; } Rect::Rect(int length,int width) { nLength=length; nWidth=width; cout<<"I am the constructor!"< } Rect::~Rect() { cout<<"I am the destructor"< } Rect::Rect(double length,double width) { dLength=length; dWidth=width; cout<<"I am the constructor!"< void main() { Rect a(2,2),b(2.3,3.4); a.Area_int(); b.Area_double(); Rect *p=new Rect(3,4); p->Area_int(); delete p; Rect *q=new Rect(3.2,3.4); q->Area_double(); delete q; } 8、声明一个Student,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。 #include class student { double score; static double tatal_score; static int count; static double ave; public: void account(double); static double sum(); static double average(); void print(); }; void student::account(double m) { score=m; tatal_score=tatal_score+m; ++count; } double student::sum() { return(tatal_score); } double student::average() { ave=tatal_score/count; return ave; } void student::print() { cout<<"人数为:"< cout<<"总成绩为: "< int student::count=0; double student::tatal_score=0.0; double student::ave=0.0; void main() { student a; a.account(97); a.sum(); a.average(); student b; b.account(87); b.sum(); b.average(); b.print(); } 9、设计一个用来表示直角坐标系的Location类,在主程序中创建类Location 的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果: A(x1,y1),B(x2,y2) Distance=d 其中:x1、y1、x2、y2为指定的坐标值,d为两个坐标点之间的距离。 #include #include class location { double x; double y; public: location(double,double); void print(location m); friend void print(location &,location &); }; location::location(double m,double n) { x=m; y=n; } void location::print(location m) { double dx=x-m.x; double dy=y-m.y; double d=sqrt(dx*dx+dy*dy); cout<<"AB的distance:"< void print(location &a,location &b) { double dx=a.x-b.x; double dy=a.y-b.y; double d=sqrt(dx*dx+dy*dy); cout<<"AB的distance:"< void main() { location A(-3.0,-2.0); location B(-4.3,4.3); A.print(B); print(A,B); } 10、使用C++的string类,将5个字符串按逆转后的顺序显示出来。例如,逆转前的5个字符串是:Germany、Japan、American、British、France 按逆转后的顺序输出字符串为: France、British、American、Japan、Germany #include #include using namespace std; void main() { string s[5]={"Germany","Japan","American","British","France"}; for(int i=4;i>=0;i--) { cout< } } 11、设计一个矩阵类Matrix,有分配空间和对矩阵赋值的功能,将这个矩阵类的对象作为参数传送到函数Mul(Matrix a,Matrix b),用Mul(Matrix a,Matrix b)函数实现两个Matrix对象相乘的运算。 #include using namespace std; class Matrix { int **x; public: int m; int n; void check(Matrix &g,Matrix &h); Matrix(); void Mul(Matrix a,Matrix b); }; Matrix::Matrix() { cout<<"输出矩阵的行和列:"< cin>>m>>n; cout<<"输入数据:"; x=new int*[m]; for(int i=0;i { x[i]=new int[n]; } for(int q=0;q { for(int r=0;r { cin>>x[q][r]; } } } void Matrix::check(Matrix &g,Matrix &h) { if(g.n!=h.m) { cout<<"Wrong input!"< exit(1); } } void Matrix::Mul(Matrix a,Matrix b) { int temp=0; cout<<"两矩阵的乘积是:"< for(int i=0;i { for(int j=0;j { temp+=a.x[i][j]+b.x[j][i]; } cout< temp=0; cout< } } void main() { Matrix a,b; a.check(a,b); a.Mul(a,b); } 实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.360docs.net/doc/f79982383.html,); error!! } } class Account { private String account; private String name; private String address; private double balance; 实验2 类和对象(一) 1、实验目的 (1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。 (2)初步掌握用类和对象编制基于对象的程序。 (3)学习检查和调试基于对象的程序。 2、实验内容 (1)有以下程序: #include 实验一类和对象 Visual C++ 6.0集成开发环境的使用: Visual C++系列产品是微软公司推出的一款优秀的C++集成开发环境,其产品定位为Windows 95/98、NT、2000 系列Win32 系统程序开发,由于其良好的界面和可操作性,被广泛应用。由于2000 年以后,微软全面转向.NET 平台,Visual C++6.0 成为支持标准C/C++规范的最后版本。 1.启动 安装完系统后,可以选择如下两种方式启动 1) 点击Windows “开始”菜单,选择“程序”菜单下“Microsoft Visual Studio 6.0”子菜单下的快捷方式Microsoft Visual C++ 6.0 启动Visual C++ 6.0。 2) 点击Windows “开始”菜单,选择“运行”,输入msdev,即可启动。启动后的界面如下: 图 1 启动界面 2.建立工程 选择“File”菜单下的“New”菜单项或直接按Ctrl+N,启动新建向导,如图2 所示: 图 2 新建向导 选择在“Projects”属性页选择Win32 Console Application,在Project Name 中输入项目名称demo,在Location 中选择项目文件,如图2 中c:\test\demo,项目所有文件将保存在此文件。输入完毕,单击确定按钮,进入下一界面如图3: 图 3 项目类型向导 在图 3 所示界面中选择a simple application,然后点击Finish 按钮,系统显示图4 所示界面。如果想退回上一步可以选择“Back”按钮。 图 4 项目信息 在图 4 中选择OK 按钮,系统完成项目的创建,并保存项目相关的信息。项目的目录结构如图5 所示。 1) Demo.dsw 是项目工作区文件,双击此文件,即可打开此项目; 2) Demo.dsp 为项目文件; 3) demo.cpp 是项目中的一个源程序;stdafx.h 和stdafx.cpp 为自动创建的源程序,一般不用修改。 图 5 目录结构 实验04 类与对象(6学时) (第4章类与对象) 一、实验目的 二、实验任务 4_1 声明一个CPU类。 包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 }; frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 4_2 声明一个简单的Computer类。 有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 4_3 声明一个表示时间的结构体。 可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。 4_4(习题4-10)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号),sex(性别)、birthday(出生日期)、id(身份证号)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现人员信息的录入和显示。要求包括:构造函数和析构函数、内联成员函数、组合。 三、实验步骤 1.(验证)声明一个CPU类,观察构造函数和析构函数的调用顺序。 首先声明枚举类型CPU_Rank,例如enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 },再声明CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,声明成员函数run和stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示顺序。在主程序中声明一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:。(程序见步骤2) ★程序的运行结果: 2.(示例)调试程序文件。 使用调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下: 操作)调试操作步骤如下: (1)单击“调试 | 逐语句”命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时Visual Studio中光标停在main()函数的入口处。实验3 类和对象
实验2 类和对象(一)
实验一 类和对象
C++语言程序设计实验答案_类与对象
C++实验二类与对象(附答案)