院系:计算机学院
实验课程:计算机基础实验
实验项目:实验三类与对象
指导老师:
开课时间:
专业:
班级:
学生:
学号:
实验二类与对象
一、实验目的与要求
1.掌握类的定义和使用,掌握类对象的声明和使用,掌握具有不同访问属性的成员的访问方式。
2.掌握对象的初始化和赋值的方法;熟悉构造函数、拷贝构造函数和析构函数的编写;
了解构造函数和析构函数的作用和使用;使用编译器调试功能,跟踪观察类的构造
函数、析构函数、成员函数的执行顺序。
3.了解成员函数的特性、友员、类的作用域及对象的、生存期等概念。
4.了解并掌握子对象的定义、赋值、使用方法,掌握静态成员、常成员的使用。
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
二、实验内容
1.编写设计一个people类。该类的数据成员有年龄(age)、身高(hight)、体重
(weight),函数成员有进食(eating)、运动(sporting)、睡眠(sleeping)。其中进食函数使体重加1,运动函数使身高加1,睡眠函数使年龄、身高、体重各加1。
要求所有成员为public公有访问权限,在主函数中通过类对象直接访问类的所有成员。
代码如下:
#include
using namespace std;
class people {
public:
int age;
double height, weight;
people(int _age = 18, double _height = 162, double _weight = 52) { age = _age;
height = _height;
weight = _weight;
}
void eating() {
weight++;
return;
}
课程名称程序设计实验实验项目类与对象实验时间年月日
实验指导老师实验评分
void sporting() {
height++;
return;
}
void sleeping() {
age++;
height++;
weight++;
return;
}
};
int main()
{
people he;
cout << "pre-age: " << he.age << endl
<< "pre-height: " << he.height << endl
<< "pre-weight: " << he.weight << endl;
he.eating();
cout << "after eating age: " << he.age << endl
<< "after eating height: " << he.height << endl
<< "after eating weight: " << he.weight << endl;
he.sporting();
cout << "after sporting age: " << he.age << endl
<< "after sporting height: " << he.height << endl
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
<< "after sporting weight: " << he.weight << endl;
he.sleeping();
cout << "after sleeping age: " << he.age << endl
<< "after sleeping height: " << he.height << endl
<< "after sleeping weight: " << he.weight << endl;
return 0;
}
运行结果:
2.重新定义people类。将所有成员设置为private私有访问权限,并在类中添加public 公有访问权限的函数成员;生长(growth),使生长函数调用私有的函数成员进行进食、运动、睡眠。
代码如下:
课程名称程序设计实验实验项目类与对象实验时间年月日
实验指导老师实验评分
#include
using namespace std;
class people {
private:
int age;
double height, weight;
void eating() {
weight++;
return;
}
void sporting() {
height++;
return;
}
void sleeping() {
age++;
height++;
weight++;
return;
}
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
public:
people(int _age = 18, double _height = 162, double _weight = 52) { age = _age;
height = _height;
weight = _weight;
}
void growth() {
cout << "pre-age: " << age << endl
<< "pre-height: " << height << endl
<< "pre-weight: " << weight << endl;
eating();
sporting();
sleeping();
cout << "after growing age: " << age << endl
<< "after growing height: " << height << endl
<< "after growing weight: " << weight << endl;
return;
}
};
int main()
{
people he;
he.growth();
return 0;
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
}
运行结果:
3.编写一个类定义形式的结构体变量people。该结构体变量包括数据成员年龄(age)、身高(hight)、体重(weight),函数成员进食(eatting)、运动(sporting)、睡眠(sleeping)。在主函数中通过结构体变量访问所有成员。
代码如下:
#include
using namespace std;
struct people {
int age;
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
double height, weight;
people(int _age = 18, double _height = 162, double _weight = 52) { age = _age;
height = _height;
weight = _weight;
}
void eating() {
weight++;
return;
}
void sporting() {
height++;
return;
}
void sleeping() {
age++;
height++;
weight++;
return;
}
};
int main()
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
{
people he;
cout << "age: " << he.age << endl
<< "height: " << he.height << endl
<< "weight: " << he.weight << endl;
return 0;
}
运行结果:
4.有理数是一个整数num和一个非零整数den的比,通常写作num/den,又称为分数。
下面程序已经定义了一个有理数Ratio。编写主函数,使用有理数类生成有理数对象,尝试用不同的初始值或改变初始值的个数对有理数对象进行初始化,并使用编译器调试工具对构造函数的调用进行跟踪,分析构造函数调用时机。
课程名称程序设计实验实验项目类与对象实验时间年月日
实验指导老师实验评分
代码如下:
#include
using namespace std;
class Ratio {
private:
int num, den;
public:
Ratio() {
num = 0;
den = 1;
}
Ratio(int n) {
num = n;
den = 1;
}
Ratio(int n, int d) {
num = n;
den = d;
}
void disp() {
cout << "num/den = " << num / den << endl;
return;
}
};
int main()
{
Ratio q1(2, 5), q2(9), q3;
q1.disp();
q2.disp();
q3.disp();
return 0;
}
运行结果:
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
构造函数在对象创建时调用
5.编写一个有理数类,其数据成员通过带默认参数值的构造函数进行初始化,把原有理数类中的3个构造函数合并为1个,在主函数中测试这个类。
代码如下:
#include
using namespace std;
class Ratio {
private:
int num, den;
public:
Ratio(int n = 0, int d = 1) {
num = n;
den = d;
}
void disp() {
课程名称程序设计实验实验项目类与对象
实验时间年月日
实验指导老师实验评分
cout << "num/den = " << num / den << endl;
return;
}
};
int main()
{
Ratio q1(2, 5), q2(9), q3;
q1.disp();
q2.disp();
q3.disp();
return 0;
}
运行结果:
6.在第5题的基础上编写有理数类,在该类中增添一个拷贝构造函数,分析拷贝构造函数的调用时机。
代码如下:
课程名称程序设计实验实验项目类与对象实验时间年月日
实验指导老师实验评分
#include
using namespace std;
class Ratio {
private:
double num, den;
public:
Ratio(int n = 0, int d = 1) {
num = n;
den = d;
}
Ratio(const Ratio &from) {
num = from.num;
den = from.den;
}
void disp() {
cout << "num/den = " << num / den << endl;
return;
}
};
int main()
{
Ratio q1(9, 5);
q1.disp();
Ratio q2 = q1;
q2.disp();
return 0;
}
运行结果:
课程名称程序设计实验实验项目类与对象实验时间年月日
实验指导老师实验评分
拷贝构造函数是在拷贝对象时调用的。
实验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()函数的入口处。