一、实验目的和要求 1. 进一步掌握类与对象的定义和使用。 2. 熟悉具有不同访问属性的成员的访问方式。 3. 观察构造函数和析构函数的执行过程。使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 |
二、实验环境(软、硬件及条件) 一台安装有Visual C++ 6.0的计算机 |
三、实验步骤 二、实验内容 1.定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run(提示信息“CPU开始运行”)、stop(提示信息“CPU停止运行”)。其中,为枚举类型CPU_Rank,定义为enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。在main函数中定义该类的一个对象,并调用其公有成员函数,观察构造函数和析构函数的调用顺序。试试能不能在主函数中打印该对象的属性值,并分析原因。 2.在上述CPU类中添加成员函数,分别用于设置及获取各属性的值,并在main函数中调用这些函数。观察当这些函数被设置成private或public时会有什么不同。 3.定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象。CPU类的定义见实验任务1,RAM、CDROM类可以自由设置一些属性,并提供类似的run、stop这两个成员函数。在main函数中测试这个类,分析成员函数的运行顺序。 4.定义一个Point类,属性为坐标X、Y的值,包含有如下成员函数:构造函数、析构函数、拷贝构造函数、设置与获取X和Y的值的函数,并测试之。 三、实验步骤 1.首先定义枚举类型CPU_Rank,再定义CPU类,包含等级、频率、电压等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。在主程序中定义一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。示例程序Lab1.cpp代码如下: #include <iostream.h> enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { private: 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; } void Run() {cout << "CPU开始运行!" << endl; } void Stop() {cout << "CPU停止运行!" << endl; } }; void main() { CPU a(P6,300,2.8); a.Run(); a.Stop(); } 2.使用debug调试功能观察程序Lab1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 3.测试能否在main函数中获取类的对象的属性值,并分析原因。为CPU类添加一些函数,以设置和获取类的对象的属性的值,如用GetRank获取rank的值,用SetRank设置rank的值。并在主函数中测试它们。分别将这些函数设置成private或public,看看结果如何,进而分析成员的不同访问属性的差别。 4.首先定义CPU类、RAM类、CDROM类。再定义computer类:定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提示信息。在主程序中定义一个computer的对象,调用其成员函数,观察类对象及其成员的构造与析构顺序,以及成员函数的调用。并使用debug功能观察程序的运行流程。 5.定义类Point,并测试之。用Debug功能跟踪构造函数的调用。 |
四、实验中遇到的问题及解决 无 |
五、实验结果及分析 1. 构造了一个CPU! CPU开始运行! CPU停止运行! 析构了一个CPU! 3. #include <iostream.h> enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { private: 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; } void Run() {cout << "CPU开始运行!" << endl; } void Stop() {cout << "CPU停止运行!" << endl; } void SetRank(CPU_Rank l){rank=l;} void GetRank(){cout<<"Rank="<<rank<<endl;} }; void main() { CPU a(P6,300,2.8); a.Run(); a.Stop(); a.SetRank(P7); a.GetRank(); } 成员函数为private时,调用时不能访问;为public时就可以调用访问。 4. #include<iostream> using namespace std; class Computer {private: int cpu,ram,cdrom; public: Computer(int c,int r,int d) {cpu=c,ram=r,cdrom=d; cout<<"构造了一个Computer!"<<endl;} void run(){cout<<"程序开始运行!"<<endl;} void stop(){cout<<"程序运行结束!"<<endl;} }; class CPU { private: CPU_Rank rank; int frequency; float voltage; public: CPU (CPU_Rank r, int f, float v) { rank = r;#include<iostream> using namespace std; enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7}; class CPU { private: 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 () { cout << "析构了一个CPU!" << endl; } void run() {cout << "CPU开始运行!" << endl; } void stop() {cout << "CPU停止运行!" << endl; } }; class RAM {private: int space,width; public: RAM() {cout<<"构造了一个RAM!"<<endl;} ~RAM(){cout<<"析构了一个RAM!"<<endl;} void run(){cout<<"内存run!"<<endl;} void stop(){cout<<"内存stop!"<<endl;} }; class CDROM { public: CDROM() {cout<<"构造了一个CDROM!"<<endl;} ~CDROM(){cout<<"析构了一个CDROM!"<<endl;} void run(){cout<<"光驱run!"<<endl;} void stop(){cout<<"光驱stop!"<<endl;} }; class Computer {private: CPU cpu; RAM ram; CDROM cdrom; public: Computer() {cout<<"构造了一个Computer!"<<endl;} ~Computer() {cout<<"析构了一个Computer!"<<endl;} void run(){cout<<"程序开始运行!"<<endl; cpu.run(); ram.run(); cdrom.run();} void stop(){cpu.stop(); ram.stop(); cdrom.stop(); cout<<"程序运行结束!"<<endl;} }; void main() {Computer k; k.run(); k.stop(); } 5. #include <iostream> using namespace std; class Point {private: int x;int y; public: Point(){cout<<"构造了一个Point函数!"<<endl;} ~Point(){cout<<"析构了一个Point函数!"<<endl;} Point(int l,int s){cout<<"("<<l<<","<<s<<")"<<endl;} void Setpoint(int m,int n){x=m,y=n;} void Getpoint(){cout<<"("<<x<<","<<y<<")"<<endl;} }; void main() {Point o(4,5),p; p.Setpoint(5,6); p.Getpoint(); }
|