桂 林 理 工 大 学
实 验 报 告
实验名称 类与对象 日期 2018年 04 月17 日
一、实验目的:
1. 掌握类的定义和使用。
2. 掌握类的对象的声明。
3. 复习具有不同访问属性的成员的访问方式。
4. 观察构造函数和析构函数的执行过程。
5. 使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
二、实验环境:
Visual C++
三、实验内容:
(写出主要的内容)
- 定义一个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函数中定义该类的一个对象,并调用其公有成员函数,观察构造函数和析构函数的调用顺序。试试能不能在主函数中打印该对象的属性值,并分析原因。
#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);
~CPU ();
void Run();
void Stop();
};
CPU::CPU (CPU_Rank r, int f, float v)
{
rank = r;
frequency = f;
voltage = v;
cout << "构造了一个CPU!" << endl;
}
CPU::~CPU ()
{ cout << "析构了一个CPU!" << endl; }
void CPU::Run()
{cout << "CPU开始运行!" << endl; }
void CPU::Stop()
{cout << "CPU停止运行!" << endl; }
void main()
{
CPU a(P2,250,1.5);
a.Run();
a.Stop();
}
输出结果:构造了一个CPU!
CPU开始运行!
CPU停止运行!
析构了一个CPU!
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函数中测试这个类,分析成员函数的运行顺序。
#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);
CPU();
~CPU ();
void Run();
void Stop();
};
CPU::CPU (CPU_Rank r, int f, float v)
{
rank = r;
frequency = f;
voltage = v;
cout << "构造了一个CPU!" << endl;
}
CPU::CPU()
{
cout << "构造了一个CPU!" << endl;
}
CPU::~CPU ()
{
cout << "析构了一个CPU!" << endl;
}
void CPU::Run()
{cout << "CPU开始运行!" << endl; }
void CPU::Stop()
{cout << "CPU停止运行!" << endl; }
class RAM
{
public:
RAM ();
~RAM () ;
void Run();
void Stop();
};
RAM::RAM ()
{
cout << "构造了一个RAM!" << endl;
}
RAM::~RAM ()
{
cout << "析构了一个RAM!" << endl;
}
void RAM::Run() {cout << "RAM开始运行!" << endl; }
void RAM::Stop() {cout << "RAM停止运行!" << endl; }
class CDROM
{
public:
CDROM ();
~CDROM ();
void Run();
void Stop();
};
CDROM::CDROM (){ cout << "构造了一个CDROM!" << endl; }
CDROM::~CDROM ()
{
cout << "析构了一个CDROM!" << endl;
}
void CDROM::Run() {cout << "CDROM开始运行!" << endl; }
void CDROM::Stop() {cout << "CDROM停止运行!" << endl; }
class COMPUTER
{
private:
CPU cpu;
RAM ram;
CDROM cdrom;
public:
COMPUTER();
~COMPUTER ();
void Run() ;
void Stop() ;
};
COMPUTER::COMPUTER()
{
cout << "构造了一个COMPUTER!" << endl;
}
COMPUTER::~COMPUTER ()
{
cout << "析构了一个COMPUTER!" << endl;
}
void COMPUTER::Run()
{
cout << "COMPUTER开始运行!" << endl;
cpu.Run();
ram.Run();
}
void COMPUTER::Stop()
{
ram.Stop();
cpu.Stop();
cout << "COMPUTER停止运行!" << endl;
}
void main()
{
COMPUTER a;
a.Run();
a.Stop();
}
输出结果:构造了一个CPU!
构造了一个RAM!
构造了一个CDROM!
构造了一个COMPUTER!
COMPUTER开始运行!
CPU开始运行!
RAM开始运行!
RAM停止运行!
CPU停止运行!
COMPUTER停止运行!
析构了一个COMPUTER!
析构了一个CDROM!
析构了一个RAM!
析构了一个CPU!
4.定义一个Point类,属性为坐标X、Y的值,包含有如下成员函数:构造函数、析构函数、拷贝构造函数、设置与获取X和Y的值的函数,并测试之。
#include<iostream.h>
class Point
{
private:
int X,Y;
public:
Point(int x=0,int y=0);
Point(Point &p);
int GetX();
int GetY();
};
Point::Point(int x,int y)
{
X=x;
Y=y;
}
Point::Point(Point &p)
{
X=p.X;
Y=p.Y;
cout<<"拷贝构造函数被调用!"<<endl;
}
int Point::GetX()
{
return X;
}
int Point::GetY()
{
return Y;
}
void main()
{
Point A(3,5);
Point B(A);
cout<<A.GetX()<<endl;
cout<<B.GetX()<<endl;
}
输出结果:拷贝构造函数被调用!
3
3
四、心得体会:
1、通过学习类与对象,基本了解掌握了面向对象的基本操作。
2、熟悉了数据成员与成员函数的不同。
3、不同类之间的不能直接使用成员函数。