实验指导书.docx

上传人:b****7 文档编号:15293890 上传时间:2023-07-03 格式:DOCX 页数:15 大小:41.07KB
下载 相关 举报
实验指导书.docx_第1页
第1页 / 共15页
实验指导书.docx_第2页
第2页 / 共15页
实验指导书.docx_第3页
第3页 / 共15页
实验指导书.docx_第4页
第4页 / 共15页
实验指导书.docx_第5页
第5页 / 共15页
实验指导书.docx_第6页
第6页 / 共15页
实验指导书.docx_第7页
第7页 / 共15页
实验指导书.docx_第8页
第8页 / 共15页
实验指导书.docx_第9页
第9页 / 共15页
实验指导书.docx_第10页
第10页 / 共15页
实验指导书.docx_第11页
第11页 / 共15页
实验指导书.docx_第12页
第12页 / 共15页
实验指导书.docx_第13页
第13页 / 共15页
实验指导书.docx_第14页
第14页 / 共15页
实验指导书.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验指导书.docx

《实验指导书.docx》由会员分享,可在线阅读,更多相关《实验指导书.docx(15页珍藏版)》请在冰点文库上搜索。

实验指导书.docx

实验指导书

实验1类与对象

一、实验目的

1.掌握类的定义和使用。

2.掌握类的定义和对象的声明。

3.复习具有不同访问属性的成员的访问方式。

4.观察构造函数和析构函数的执行过程。

5.学习类的聚集使用方法。

6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

二、实验任务

1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。

其中,rank为枚举类型CPU_Rank,定义为enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。

观察构造函数和析构函数的调用顺序。

2.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。

cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。

3.(选做)设计一个用于人事管理的People(人员)类。

考虑到通用性,这里只抽象出所有类型人员都具有的属性:

number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。

其中“出生日期”定义为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:

构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

三、实验步骤

1.首先定义枚举类型CPU_Rank,例如enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。

在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。

程序名:

lab4_1.cpp。

2.使用debug调试功能观察程序ab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

参考程序如下:

//lab4_1.cpp

#include

enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};

classCPU

{

private:

CPU_Rankrank;

intfrequency;

floatvoltage;

public:

CPU(CPU_Rankr,intf,floatv)

{

rank=r;

frequency=f;

voltage=v;

cout<<"构造了一个CPU!

"<

}

~CPU(){cout<<"析构了一个CPU!

"<

CPU_RankGetRank()const{returnrank;}

intGetFrequency()const{returnfrequency;}

floatGetVoltage()const{returnvoltage;}

voidSetRank(CPU_Rankr){rank=r;}

voidSetFrequency(intf){frequency=f;}

voidSetVoltage(floatv){voltage=v;}

voidRun(){cout<<"CPU开始运行!

"<

voidStop(){cout<<"CPU停止运行!

"<

};

voidmain()

{

CPUa(P6,300,2.8);

a.Run();

a.Stop();

}

3.调试操作步骤如下:

Ø单击Build|StartDebug|StepInto命令,或按下快捷键F11,系统进入单步执行状态,程序开始运行,一个DOS窗口出现,此时VisualStudio中光标停在main()函数的入口处;

Ø从Debug菜单或Debug工具栏中单击StepOver,此时,光标下移,程序准备执行CPU对象的初始化;

Ø单击StepInto,程序准备执行CPU类的构造函数;

Ø连续单击StepOver,观察构造函数的执行情况,直到执行完构造函数,程序回到主函数;

Ø此时程序准备执行CPU对象的run()方法,单击StepInto,程序进入run()成员函数,连续单击StepOver,直到回到main()函数;

Ø继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识;

Ø再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。

4.首先定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。

再定义Computer类:

定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提示信息。

在主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。

程序名:

lab4_2.cpp。

5.使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。

实验2数组、指针与字符串

一、实验目的

1.学习使用数组数据对象;

2.学习字符串数据的组织和处理;

3.学习标准C++库的使用;

4.掌握指针的使用方法;

5.练习通过debug观察指针的内容及其所指的对象的内容;

6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用;

7.分别使用字符数组和标准C++库练习处理字符串的方法。

二、实验任务

1.编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。

2.使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。

3.编程实现两字符串的连接。

要求使用字符数组保存字符串,不要使用系统函数。

4.使用string类定义字符串对象,重新实现上一小题。

5.定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。

display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。

6.定义包含5个元素的对象数组,每个元素都是Employee类型的对象。

7.(选做)修改实验四中的选做实验中的people(人员)类。

具有的属性如下:

姓名charname[11]、编号charnumber[7]、性别charsex[3]、生日birthday、身份证号charid[16]。

其中“出生日期”定义为一个“日期”类内嵌子对象。

用成员函数实现对人员信息的录入和显示。

要求包括:

构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。

在测试程序中定义people类的对象数组,录入数据并显示。

三、实验步骤

1.编写矩阵转置函数,输入参数为3×3整型数组,使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入、输出。

程序名:

lab6_1.cpp。

2.改写矩阵转置函数,参数为整型指针,使用指针对数组元素进行操作,在main()函数中使用new操作符分配内存生成动态数组。

通过debug观察指针的内容及其所指的对象中的内容。

程序名:

lab6_2.cpp。

3.编程实现两字符串的连接。

定义字符数组保存字符串,在程序中提示用户输入两个字符串,实现两个字符串的连接,最后用cout语句显示输出。

程序名:

lab6_3.cpp。

用cin实现输入,注意,字符串的结束标志是ASCII码0,使用循环语句进行字符串间的字符拷贝。

4.使用string类定义字符串对象,编程实现两字符串的连接。

在string类中已重载了运算符“+=”实现字符串的连接,可以使用这个功能。

程序名:

lab6_4.cpp。

5.在employee.h文件中定义Employee类。

Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*name);display()中使用cout显示姓名、街道地址、城市和邮编等属性,change_name()改变类中表示姓名属性的字符数组类型的数据成员。

在主程序中定义这个类的对象并对其进行操作。

程序名:

lab6_5.cpp。

6.使用上一小题中定义的Employee类定义对象数组emp[5],使用循环语句把数据显示出来。

程序名:

lab6_6.cpp。

实验3运算符重载

一、实验目的

1.掌握运算符重载的方法;

2.掌握运算法重载的规则;

3.学习类型转换运算符。

二、实验任务

1.定义一个复数complex类型,虚部和实部为私有数据类型;

2.重载加法运算符,减法运算符,+=运算符。

3.重载一元负号和一元正号。

4.重载输入、输出运算符。

5.定义类型转换运算符函数,将复数类型转换成double类型。

三、实验步骤

1.参考教材。

Classcomplex{

Doublere,im;

Public:

Complex(doubler=0,doubleI=0):

re(r),im(i){};

Doublereal()const{returnre;}

Doubleimag()const{returnim;}

Complex&operator+=(complex);

Complex&operator+=(double);

}

complexoperator+(complex,complex);

complexoperator+(complex,double);

complexoperator+(double,complex);

complexoperator-(complex,complex);

complexoperator-(complex,double);

complexoperator-(double,complex);

complexoperator+(complex);

complexoperator-(complex);

istream&operator>>(istream&,complex&);

ostream&operator>>(ostream&,complex&);

2.编写main函数,测试复数类型。

实验4继承与派生

一、实验目的

1.学习定义和使用类的继承关系,定义派生类;

2.熟悉不同继承方式下对基类成员的访问控制;

3.学习利用虚基类解决二义性问题。

二、实验任务

1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?

编程试试看。

2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

3.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。

从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?

编程试试看。

4.(选做)从实验6中的people(人员)类派生出student(学生)类,添加属性:

班号charclassNO[7];从people类派生出teacher(教师)类,添加属性:

职务charprincipalship[11]、部门chardepartment[21]。

从student类中派生出graduate(研究生)类,添加属性:

专业charsubject[21]、导师teacheradviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。

重载相应的成员函数,测试这些类。

类之间的关系如下图所示:

图7-1类图

三、实验步骤

1.编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示:

errorC2248:

'age':

cannotaccessprivatememberdeclaredinclass'Animal'

errorC2248:

'age':

cannotaccessprivatememberdeclaredinclass'Animal'

把age改为公有成员变量后重新编译就可以了。

程序名:

lab7_1.cpp。

2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

程序名:

lab7_2.cpp。

3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。

再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。

程序名:

lab7_3.cpp。

编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。

这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。

实验5多态性

一、实验目的

1.掌握运算符重载的方法;

2.学习使用虚函数实现动态多态性。

二、实验任务

1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“--”(自减)运算符,实现对坐标值的改变。

2.定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。

观察虚函数的作用。

3.(选做)对实验六中的people类重载“==”运算符和“=”运算符,“==”运算符判断两个people类对象的id属性的大小;“=”运算符实现people类对象的赋值操作。

三、实验步骤

1.编写程序定义Point类,在类中定义整型的私有成员变量_x、_y,定义成员函数Point&operator++();Pointoperator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point&operator--();Pointoperator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。

程序名:

lab8_1.cpp。

2.编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。

在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。

再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。

程序名:

lab8_2.cpp。

实验6流类库与输入/输出

一、实验目的

1.熟悉流类库中常用的类及其成员函数的用法。

2.学习标准输入输出及格式控制;

3.学习对文件的应用方法(二进制文件、文本文件)。

二、实验任务

1.观察以下程序的输出,注意对输出格式的控制方法;

//lab11_1.cpp

#include

usingnamespacestd;

#defineD(a)T<<#a<

ofstreamT("output.out");

voidmain(){

D(inti=53;)

D(floatf=4700113.141593;)

char*s="Isthereanymore?

";

D(T.setf(ios:

:

unitbuf);)

D(T.setf(ios:

:

showbase);)

D(T.setf(ios:

:

uppercase);)

D(T.setf(ios:

:

showpos);)

D(T<

D(T.setf(ios:

:

hex,ios:

:

basefield);)

D(T<

D(T.unsetf(ios:

:

uppercase);)

D(T.setf(ios:

:

oct,ios:

:

basefield);)

D(T<

D(T.unsetf(ios:

:

showbase);)

D(T.setf(ios:

:

dec,ios:

:

basefield);)

D(T.setf(ios:

:

left,ios:

:

adjustfield);)

D(T.fill('0');)

D(T<<"fillchar:

"<

D(T.width(8);)

T<

D(T.setf(ios:

:

right,ios:

:

adjustfield);)

D(T.width(8);)

T<

D(T.setf(ios:

:

internal,ios:

:

adjustfield);)

D(T.width(8);)

T<

D(T<

D(T.unsetf(ios:

:

showpos);)

D(T.setf(ios:

:

showpoint);)

D(T<<"prec="<

D(T.setf(ios:

:

scientific,ios:

:

floatfield);)

D(T<

D(T.setf(ios:

:

fixed,ios:

:

floatfield);)

D(T<

D(T.setf(0,ios:

:

floatfield);)//Automatic

D(T<

D(T.precision(16);)

D(T<<"prec="<

D(T<

D(T.setf(ios:

:

scientific,ios:

:

floatfield);)

D(T<

D(T.setf(ios:

:

fixed,ios:

:

floatfield);)

D(T<

D(T.setf(0,ios:

:

floatfield);)//Automatic

D(T<

D(T.width(8);)

T<

D(T.width(36);)

T<

D(T.setf(ios:

:

left,ios:

:

adjustfield);)

D(T.width(36);)

T<

D(T.unsetf(ios:

:

showpoint);)

D(T.unsetf(ios:

:

unitbuf);)

}

2.编写程序,用二进制方式打开指定的一个文件,在每一行前加行号。

3.(选做)使用实验十中的学生类数组,输入数据,显示出来,使用I/O流把此数组的内容写入磁盘文件,再显示出文件内容。

三、实验步骤

1.观察题目中程序的输出,学习对输出格式的控制方法;尝试更改输出语句中的参数,以加深对输出格式的理解;

2.编写程序lab11_2.cpp使用voidmain(intargc,char*argv[])函数中的参数传递操作的文件名,定义ofstream的对象对文件进行操作,使用getline成员函数读入数据,使用cout输出字符到文件。

 

欢迎您的下载,

资料仅供参考!

 

致力为企业和个人提供合同协议,策划案计划书,学习资料等等

打造全网一站式需求

 

3.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2