}
swap(int&x)
{
cout<<"pleaseinputanumber:
x=";
scanf("%d",&x);
returnx;
}
3)定义一个CPU类,包含等级(Rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。
其中,rank为枚举类型CPU__Rank,定义为enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},frequency为单位是MHz的整型数,voltage为浮点型的电压值。
观察构造函数和析构函数的调用顺序。
第一种:
#include
usingnamespacestd;
classCPU
{
public:
intrun();
intstop();
CPU(intfrequency1,floatvoltage1)
{
cout<<"build!
"<frequency=frequency1;
voltage=voltage1;
cout<<"frequency="<cout<<"voltage="<}
~CPU()
{
cout<<"destory!
"<}
private:
intfrequency;
floatvoltage;
};
enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};
voidmain()
{
CPUa(3500,30);
}
第二种:
#include
usingnamespacestd;
classCPU
{
public:
intrun();
intstop();
CPU(intfrequency1,floatvoltage1):
frequency(frequency1),voltage(voltage1)
{
cout<<"build!
"<cout<<"frequency="<cout<<"voltage="<}
~CPU()
{
cout<<"destory!
"<}
private:
intfrequency;
floatvoltage;
};
enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};
voidmain()
{
intfrequency;
floatvoltage;
cout<<"frequenc=";
cin>>frequency;
cout<<"voltage=";
cin>>voltage;
CPUa(frequency,voltage);
}
4)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。
cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类,为以上的类编写构造和析构函数,观察组合类和内嵌类的构造函数和析构函数的调用顺序。
#include
usingnamespacestd;
classCPU{
public:
CPU(){
cout<<"cpubuild!
"<}
~CPU(){
cout<<"cpudestory!
"<}
};
classRAM{
public:
RAM(){
cout<<"rambuild!
"<}
~RAM(){
cout<<"ramdestory!
"<}
};
classCDROM{
public:
CDROM(){
cout<<"cdrombuild!
"<}
~CDROM(){
cout<<"cdromdestory!
"<}
};
classComputer{
private:
CPUcpu;
RAMram;
CDROMcdrom;
public:
Computer(){
cout<<"Computerbuild!
"<}
~Computer(){
cout<<"Computerdestory!
"<}
};
intmain(){
ComputerA;
}
5)为题目2)的类编写复制构造函数,在主函数中利用复制构造的方式创建新的对象,观察对象的状态。
#include
usingnamespacestd;
classA
{
inta;
public:
A(inta1=0)
{
a=a1;
}
A(A&p);
intgetA()
{
returna;
}
};
A:
:
A(A&p)
{
a=p.a;
}
voidmain()
{
Aa
(2);
cout<<"原本结果:
"<Ab(a);
cout<<"复制结果:
"<}
6)思考并回答以下概念:
函数重载,引用,类,对象,数据成员,函数成员,访问属性,构造函数,析构函数,类的组合,内嵌对象,初始化列表,复制构造函数。
3.主要仪器设备及软件:
PC+Windows2000+VC6.0
实验二C++程序的结构
(设计性实验2学时)
1.目的要求:
1)观察程序运行中变量的作用域、生存期和可见性;
2)学习类的静态成员的使用;
3)学习多文件结构在C++程序中的使用。
2.实验内容:
7)实现客户机(CLIENT)类。
定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。
#include
usingnamespacestd;
classCLIENT
{
public:
staticvoidChangeServerName()//静态函数ChangeServerName()改变服务器名称
{
cout<<"theClientNum:
ClientNum="<cout<<"theServerName:
ServerName="<cout<<"changetheServerName:
ServerName=";
cin>>ServerName;
cout<<"\n"<cout<<"nowtheServerName:
ServerName="<}
private:
staticcharServerName;//字符型静态数据成员ServerName,保存其服务器名称
staticintClientNum;//整型静态数据成员ClientNum,记录已定义的客户数量
};
charCLIENT:
:
ServerName='t';
intCLIENT:
:
ClientNum=0;
voidmain()
{
CLIENTA;
CLIENT:
:
ChangeServerName();
}
8)利用多文件结构实现题目1),在头文件client.h中定义类,在文件client.cpp中实现该类,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况,要求ClientNum能够实时记录客户机对象的数量。
在文件client.cpp中实现该类
#include"client.h"
#include
usingnamespacestd;
charCLIENT:
:
ServerName='t';
intCLIENT:
:
ClientNum=0;
voidCLIENT:
:
inputServerName()//静态函数ChangeServerName()改变服务器名称
{
cout<<"inputtheServerName:
ServerName=";
cin>>ServerName;
//cout<<"nowtheServerName:
ServerName="<ClientNum++;
cout<<"nowtheClientNum:
ClientNum="<}
CLIENT:
:
~CLIENT()
{
ClientNum--;
cout<<"nowtheClientNum:
ClientNum="<}
在文件test.cpp中测试这个类
#include"client.h"
#include
usingnamespacestd;
voidmain()
{
cout<<"begain!
!
!
!
!
!
"<CLIENTA;
CLIENT:
:
inputServerName();
CLIENTB;
CLIENT:
:
inputServerName();
cout<<"end!
!
!
!
!
!
"<}
在头文件client.h中定义类
classCLIENT
{
public:
staticvoidinputServerName();
~CLIENT();
private:
staticcharServerName;//字符型静态数据成员ServerName,保存其服务器名称
staticintClientNum;//整型静态数据成员ClientNum,记录已定义的客户数量
};
9)思考并回答以下概念:
类的静态数据成员,类的静态函数成员,多文件结构,文件包含。
3.主要仪器设备及软件:
Windows2000+VC6.0
实验三数组、指针与字符串实验
(设计性实验4学时)
1.目的要求:
1)学习使用数组;学习字符串数据的组织和处理;学习标准C++库的使用;
2)掌握指针的使用方法;练习通过debug观察指针的内容及其所指的对象的内容;练习通过动态内存分配实现动态数组,并体会指针在其中的作用;
3)分别使用字符数组和标准C++库练习处理字符串的方法。
2.实验内容:
10)编写一个类用于处理3×3矩阵转置,测试转置的效果,输出转置前后的矩阵。
#include
usingnamespacestd;
classPoint
{
public:
Point()//构造函数里赋值
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cin>>a[i][j];
}
}
}
move()//转置
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
b[i][j]=a[j][i];
}
}
}
voidshow()//显示转置结果
{
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<
}
cout<<'\t'<}
}
private:
inti;//行
intj;//列
inta[3][3];//原数组
intb[3][3];//转置数组
};
intmain()
{
inti,j;
intx;
cout<<"assignmentbegin!
!
!
"<cout<<"Pleaseenterthevalues"<Pointa1;
a1.move();
cout<<"result:
"<a1.show();
return0;
}
11)定义一个具有构造函数和析构函数的类,如实验一的CPU类,定义一个CPU的对象数组,观察构造函数的析构函数的调用过程。
#include
usingnamespacestd;
classCPU
{
public:
CPU(intxx,intyy,inttt)
{
x=xx;
y=yy;
t=tt;
cout<!
!
"<}
~CPU()
{
cout<!
!
"<}
private:
intx,y,t;
};
intmain()
{
CPUcpu[3]={CPU(1,2,1),CPU(3,4,2),CPU(5,6,3)};
return0;
}
12)利用动态内存分配的方式重新完成题目2)。
#include
usingnamespacestd;
classCPU
{
public:
CPU():
x(0),y(0),t(0){cout<<"begain!
!
!
"<CPU(intxx,intyy,inttt):
x(xx),y(yy),t(tt){}
voidmove(intxx,intyy,inttt)
{
x=xx;
y=yy;
t=tt;
cout<!
!
"<}
~CPU()
{
cout<!
!
"<}
private:
intx,y,t;
};
intmain()
{
CPU*p=newCPU[3];
p[0].move(1,2,1);
p[1].move(3,4,2);
p[2].move(5,6,3);
cout<<"end!
!
!
"<delete[]p;
return0;
}
13)使用系统提供的string类定义字符串对象并初始化,实现从原始字符串中提取一个子串。
#include
#include
usingnamespacestd;
intmain()
{
inti,j;
stringA="abcdefghijklnm";
stringB="123456789";
cout<<"A="<cout<<"起始位置:
";
cin>>i;
cout<<"元素个数:
";
cin>>j;
stringa=A.substr(i-1,j);//从位置三开始的九个字符
cout<cout<<"\n"<cout<<"B="<
cout<<"起始位置:
";
cin>>i;
cout<<"元素个数:
";
cin>>j;
stringb=B.substr(i-1,j);//从位置七开始的两个字符
cout<
return0;
}
14)选做:
定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。
Point.h
#ifndef_POINT_H
#define_POINT_H
classPoint
{
public:
Point(floatx=0,floaty=0):
x(x),y(y){}
floatgetX()const{returnx;}
floatgetY()const{returny;}
private:
floatx,y;
};
#endif
3_5.cpp
/*定义一个Point(二维点类)的对象数组,利用该数组实现直线的线性拟合。
*/
#include"Point.h"
#include
#include
usingnamespacestd;
floatlineFit(constPointpoints[],intnPoint)
{
inti;
floatavgX=0,avgY=0;
floatlxx=0,lyy=0,lxy=0;
for(i=0;i