1、实验指导书实验1 类与对象一、 实验目的1. 掌握类的定义和使用。2. 掌握类的定义和对象的声明。3. 复习具有不同访问属性的成员的访问方式。4. 观察构造函数和析构函数的执行过程。5. 学习类的聚集使用方法。6. 使用VC+的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。二、 实验任务1. 定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,定义为enum CPU_Rank P1=1,P2,P3,P4,P5,P6,P7,freque
2、ncy为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。2. 定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。3. (选做)设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用
3、成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。三、 实验步骤1. 首先定义枚举类型CPU_Rank,例如enum CPU_Rank P1=1,P2,P3,P4,P5,P6,P7,再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:lab4_1.cpp。2. 使用debug调试功能观察程序ab4_1.
4、cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下:/lab4_1.cpp#include enum CPU_Rank P1=1,P2,P3,P4,P5,P6,P7;class CPUprivate: CPU_Rank rank; int frequency; float voltage;public: CPU (CPU_Rank r, int f, float v) rank = r; frequency = f; voltage = v; cout 构造了一个CPU! endl; CPU () cout 析构了一个CPU! endl; CPU_Rank Ge
5、tRank() const return rank; int GetFrequency() const return frequency; float GetVoltage() const return voltage; void SetRank(CPU_Rank r) rank = r; void SetFrequency(int f) frequency = f; void SetVoltage(float v) voltage = v; void Run() cout CPU开始运行! endl; void Stop() cout CPU停止运行! (istream&, complex&
6、);ostream& operator(ostream&, complex&);2. 编写main函数,测试复数类型。实验4 继承与派生一、 实验目的1. 学习定义和使用类的继承关系,定义派生类;2. 熟悉不同继承方式下对基类成员的访问控制;3. 学习利用虚基类解决二义性问题。二、 实验任务1. 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2. 定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass
7、,观察构造函数和析构函数的执行情况。3. 定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。4. (选做)从实验6中的people(人员)类派生出student(学生)类,添加
8、属性:班号char classNO7;从people类派生出teacher(教师)类,添加属性:职务char principalship11、部门char department21。从student类中派生出graduate(研究生)类,添加属性:专业char subject21、导师teacher adviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。类之间的关系如下图所示:图7-1 类图三、 实验步骤1. 编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n
9、)中直接对age赋值时,会出现类似以下的错误提示:error C2248: age : cannot access private member declared in class Animalerror C2248: age : cannot access private member declared in class Animal把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。2. 编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7_2.c
10、pp。3. 用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。4. 编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7_3.cpp。编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。实验5 多态性一、 实验目的1. 掌握运算符
11、重载的方法;2. 学习使用虚函数实现动态多态性。二、 实验任务1. 定义Point类,有坐标_x,_y两个成员变量;对Point类重载“+”(自增)、“-”(自减)运算符,实现对坐标值的改变。2. 定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函数的作用。3. (选做)对实验六中的people类重载“=”运算符和“=”运算符,“=”运算符判断两个people类对象的id属性的大小;“=”运算符实现
12、people类对象的赋值操作。三、 实验步骤1. 编写程序定义Point类,在类中定义整型的私有成员变量_x、_y,定义成员函数Point& operator+();Point operator+(int); 以实现对Point类重载“+”(自增)运算符,定义成员函数Point& operator-();Point operator-(int);以实现对Point类重载“-”(自减)运算符,实现对坐标值的改变。程序名:lab8_1.cpp。2. 编写程序定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicyc
13、le和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。在main()函数中定义vehicle、bicycle、motorcar、motorcycle的对象,调用其Run()、Stop()函数,观察其执行情况。再分别用vehicle类型的指针来调用这几个对象的成员函数,看看能否成功;把Run、Stop定义为虚函数,再试试看。程序名:lab8_2.cpp。实验6 流类库与输入/输出一、 实验目的1. 熟悉流类库中常用的类及其成员函数的用法。2. 学习标准输入输出及格式控制;3. 学习对文件的应用方法(二进制文件、文本文件)。二、 实验任务1. 观察以下程
14、序的输出,注意对输出格式的控制方法;/lab11_1.cpp#include using namespace std;#define D(a) T #a endl; aofstream T(output.out);void main() D(int i = 53;) D(float f = 4700113.141593;) char* s = Is there any more?; D(T.setf(ios:unitbuf);) D(T.setf(ios:showbase);) D(T.setf(ios:uppercase);) D(T.setf(ios:showpos);) D(T i endl;) D(T.setf(ios:hex, ios:basefield);) D(T i endl;) D(T.unsetf(ios:uppercase);) D(T.setf(ios:oct, ios:basefield);)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1