c++面向对象实验报告.docx
《c++面向对象实验报告.docx》由会员分享,可在线阅读,更多相关《c++面向对象实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
c++面向对象实验报告
实验一类与对象
一、实验目的
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、#include
usingnamespacestd;
enumCPU_Rank{p1=1,p2,p3,p4,p5,p6,p7};
classCPU
{private:
CPU_Rankrank;
intfreauency;
floatvoltage;
public:
CPU(CPU_Rankr,intf,floatv)
{rank=r;
freauency=f;
voltage=v;
cout<<"ThisisCPUconstructprogram"<~CPU()
{cout<<"ThisisCPUdestroyfunction"<voidrun(){cout<<"TheCPUisrunning"<voidstop(){cout<<"TheCPUisStopping"<};
intmain()
{
enumCPU_Rankrank;
rank=p5;
CPUcpu1(rank,1024,;
();
();
return0;
}
运行结果:
ThisisCPUconstructprogram
TheCPUisrunning
TheCPUisStopping
ThisisCPUdestroyfunction
2、#include
usingnamespacestd;
enumCPU_Rank{p1=1,p2,p3,p4,p5,p6,p7};
classCPU
{private:
CPU_Rankrank;
intfreauency;
floatvoltage;
public:
CPU(CPU_Rankr=p1,intf=0,floatv=0)
{rank=r;
freauency=f;
voltage=v;
cout<<"ThisisCPUconstructprogram"<~CPU()
{cout<<"ThisisCPUdestroyfunction"<voidrun(){cout<<"TheCPUisrunning"<voidstop(){cout<<"TheCPUisStopping"<};
classRAM
{private:
intrank;
intsize;
public:
RAM(intr=0,ints=0)
{rank=r;
size=s;}
voidrun(){cout<<"TheRAMisrunning"<voidstop(){cout<<"TheRAMisStopping"<};
classCDROM
{private:
intrank;
intsize;
public:
CDROM(intr=0,ints=0)
{rank=r;
size=s;}
voidrun(){cout<<"TheCDROMisrunning"<voidstop(){cout<<"TheCDROMisStopping"<};
classComputer
{
private:
CPUcpu;
RAMram;
CDROMcdrom;
public:
Computer(CPUc,RAMr,CDROMcd)
{cout<<"ThisistheComputerConstruct"<cpu=c;
ram=r;
cdrom=cd;}
voidrun()
{cout<<"ThisisComputerisrunning"<();
();}
voidstop()
{cout<<"ThisisComputerisstop"<();
();}
};
intmain()
{enumCPU_Rankrank;
rank=p5;
CPUcpu1(rank,1024,;
RAMram(5,1024);
CDROMcdrom(5,1024);
Computercp(cpu1,ram,cdrom);
();
();
return0;
}
实验二C++程序结构
1、实验目的
1.观察程序运行中的变量的作用域、生存期和可见性。
2.学习类的静态成员的使用。
3.学习多文件结构在C++程序中的使用。
2、实验任务
1.运行下面程序,2.观察变量x、y的值。
实现客户机(CLIENT)类。
定义字符型静态数据成员ServerName,4.保存其服5.务器名6.称:
整型静态数据成员ClientNum,7.记录已定义的客户数量;定义静态函数ChangeServerName()改变服8.务器名9.称。
在头文件中定义类,10.在文件中实现,11.在文件中测试这个类,12.观察相应的成员变量取值的变化情况。
实验二C++程序结构
1、实验目的
1.观察程序运行中的变量的作用域、生存期和可见性。
2.学习类的静态成员的使用。
3.学习多文件结构在C++程序中的使用。
2、实验任务
1.运行下面程序,2.观察变量x、y的值。
3.实现客户机(CLIENT)类。
定义字符型静态数据成员ServerName,4.保存其服务器名称:
整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。
在头文件中定义类,在文件中实现,在文件中测试这个类,观察相应的成员变量取值的变化情况。
三、实验结果
1.
2.服务器名称为:
N
客户机数量为:
2
服务器名称为:
A
实验源代码:
1.#include
usingnamespacestd;
voidfn1();
intx=1,y=2;
voidmain()
{
cout<<"Begin..."<cout<<"x="<cout<<"y="<cout<<"Evaluatexandyinmain()..."<intx=10,y=20;
cout<<"x="<cout<<"y="<cout<<"Stepintofn1()..."<fn1();
cout<<"Backinmain"<cout<<"x="<cout<<"y="<return0;
}
voidfn1()
{
inty=200;
cout<<"x="<cout<<"y="<}
2.//
#include
#include
usingnamespacestd;
classCLIENT
{
private:
staticcharServerName;
staticintClientNum;
public:
CLIENT();
~CLIENT();
staticintGetClientNum();
staticvoidChangServerName(charname);
staticcharGetServerName();
};
//
#include""
CLIENT:
:
CLIENT()
{
ClientNum++;
}
CLIENT:
:
~CLIENT()
{
ClientNum--;
}
intCLIENT:
:
GetClientNum()
{
returnClientNum;
}
voidCLIENT:
:
ChangServerName(charname)
{
ServerName=name;
}
charCLIENT:
:
GetServerName()
{
returnServerName;
}
//
#include<>
#include""
intCLIENT:
:
ClientNum=0;
charCLIENT:
:
ServerName='N';
intmain()
{
CLIENTa;
CLIENTb;
cout<<"服务器名称为:
"<:
GetServerName()<CLIENT:
:
ChangServerName('A');
cout<<"客户机数量为:
"<:
GetClientNum()<cout<<"服务器名称为:
"<:
GetServerName()<}
实验三数组与指针
一、实验目的
1、学习使用数组。
2、学习字符串数据的组织和处理。
3、掌握指针的使用方法。
4、练习通过debug观察指针的内容及其所指的对象的内容。
5、练习通过动态内存分配实现动态数组,并体会指针在其中的作用。
二、实验任务
1、测试3X3矩阵转置函数的程序,程序如下:
#include
usingnamespacestd;
voidmove(intmatrix[3][3])
{
inti,j,k;
for(i=0;i<3;i++)
for(j=0;j
{
k=matrix[i][j];
matrix[i][j]=matrix[j][i];
matrix[j][i]=k;
}
}
intmain()
{
inti,j;
intdata[3][3];
cout<<"输入矩阵的元素"<for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
cout<<"第"<
<<"个元素为:
";
cin>>data[i][j];
}
cout<<"输入的矩阵的为:
"<for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<cout<}
move(data);
cout<<"转置后的矩阵的为:
"<for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<cout<}
}
2、使用动态内存分配生成动态数组来重新设计一个3X3矩阵转置函数,使用指针实现函数的功能。
3、编程实现两字符串的连接。
要求使用字符数组保存字符串,不要使用系统函数。
4、使用String类定义字符串对象,重新实现上一小题。
(选作)5、定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。
display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性。
实现并测试这个类。
(提示:
对字符数组的赋值可以使用字符串拷贝函数strcpy(char*,char*,name))。
(选作)6、定义包含个5元素的对象数组,每个元素都是Employee类型的对象。
实验四继承与派生
一、实验目的
1、学习定义和使用类的继承关系,定义派生类。
2、熟悉不同继承方式下对基类成员的访问控制。
3、学习利用虚基类解决二义性问题。
二、实验任务
1、定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗编程试试看。
2、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
3、定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,自行车类具有高度(Height)等属性,汽车类有座位数(SeatNum)等属性。
从bicycle和motorcar类派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把设置为虚基类,会有什么问题编程试试看。
实验结果:
1、errorC2248:
'age':
cannotaccessprivatememberdeclaredinclass'Animal'
改正方案:
将Animal类中私有成员age换成公共成员。
2、构造基类对象!
构造派生类对象!
析构派生类对象!
析构基类对象!
3、Nowitisrunning!
Nowithasstopped!
//如果vehicle不是虚基类,有错误:
errorC2385:
'motorcycle:
:
Run'isambiguous
……
源程序:
1、#include
usingnamespacestd;
classAnimal
{
private:
intage;
public:
Animal(){};
~Animal(){};
};
classDog:
privateAnimal
{
public:
Dog(){};
~Dog(){};
voidSetAge(intn){age=n;}
};
intmain()
{
Doga;
(10);
return0;
}
2、#include
usingnamespacestd;
classBaseClass
{
public:
BaseClass(){cout<<"构造基类对象!
"<~BaseClass(){cout<<"析构基类对象!
"<};
classDerivedClass:
publicBaseClass
{
public:
DerivedClass(){cout<<"构造派生类对象!
"<~DerivedClass(){cout<<"析构派生类对象!
"<};
intmain()
{
DerivedClassd;
}
3、nclude
usingnamespacestd;
classvehicle
{
private:
intMaxSpeed;
intWeight;
public:
vehicle(){MaxSpeed=0;Weight=0;};
~vehicle(){};
voidRun(){cout<<"Nowitisrunning!
"<voidStop(){cout<<"Nowithasstopped!
"<};
classbicycle:
virtualpublicvehicle
{
private:
intHeight;
public:
bicycle(){};
~bicycle(){};
};
classmotorcar:
virtualpublicvehicle
{
private:
intSeatNum;
public:
motorcar(){};
~motorcar(){};
};
classmotorcycle:
publicbicycle,publicmotorcar
{
public:
motorcycle(){};
~motorcycle(){};
};
intmain()
{
motorcyclea;
();
();
}