} B.截图
实验三、类与对象实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁
一、实验目的:
1、掌握类与对象的声明和使用。
2、观察构造函数与析构函数的执行过程。
3、掌握具有不同访问属性的成员的访问方式。
4、使用DEBUG调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
二、实验内容:
1、声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_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类的一个对象,声明并实现这个类。
三、实验报告:
1、cpu类
A.程序
#includeusing 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(int newrank,int newfrequency,float newvoltage);
void run();
void stop();
~CPU(){cout<<"成功调用析构函数"<};void CPU::run()
{
cout<<"程序开始执行"<}void CPU::stop()
{
cout<<"程序结束"<}CPU::CPU(int newrank,int newfrequency,float newvoltage)
{
rank=(CPU_Rank)newrank;
frequency=newfrequency;
voltage=newvoltage;
cout<<"成功调用构造函数"< cout<<"等级:"< cout<<"频率:"< cout<<"电压:"<} int main()
{
CPU cpu(2,60,220);
cpu.run();
cpu.stop();
return 0;
}
B.截图
2.computer类
A.程序
#includeenum 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!"< } ~CPU()
{
cout<<"其构了一个cpu!"< CPU_rank getrank() const { return rank;}
void setrank(CPU_rank r)
{ rank=r;}
void run()
{cout<<"cpu开始运行!"< } void stop()
{
cout<<"cpu停止运行!"< }};
class RAM
{
private:
int ram;
public:
RAM(int r)
{
cout<<"构造了一个ram!"< RAM() {
ram=0;cout<<"构造了一个ram!"< } ~RAM()
{
cout<<"析构了一个ram!"< } void run()
{
cout<<"ram开始运行!"< } void stop()
{
cout<<"ram停止运行!"< }};
class CDRAM
{
private:
int cdram;
public:
CDRAM(int c)
{
cdram=c;
cout<<"构造了一个cdram!"< } CDRAM()
{
cout<<"构造了一个cdram!"< } ~CDRAM()
{
cout<<"析构了一个cdram!"< } void run()
{
cout<<"cdram开始运行"< } void stop()
{
cout<<"cdram停止运行"< }};
class computer
{
private:
CPU cpu;RAM ram;CDRAM cdram;
public:
computer(CPU c,RAM r,CDRAM cd);
computer();
~computer()
{
cout<<"析构了一个computer"< } computer(computer &p);
void run()
{
cout<<"computer开始运行"< } void stop()
{
cout<<"computer停止运行"< }};
computer::computer():cpu(p6,100,float(1.3)),ram(20),cdram(30)
{
cout<<"构造了一个 cpu00"<}computer::computer(CPU c,RAM r,CDRAM cd):cpu(c),ram(r),cdram(cd)
{
cout<<"构造了一个computer"<}computer::computer(computer &p): cpu(p.cpu),ram(p.ram),cdram(p.cdram)
{
cout<<"调用了复制构造函数"<}void main()
{
CPU m(p6,300,float(2.8));
RAM n(1);
CDRAM q(2);
computer com1;
computer com2(m,n,q);
}
B.截图
实验四、C++程序结构实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁 一、实验目的:
1、观察程序运行时变量的作用域、生存期和可见性。
2、掌握类的静态成员的使用。
3、学习多文件结构在C++程序中的使用。
二、实验内容:
1、运行下面的程序,观察变量x、y的值。
#include using namespace std;
void fn1();
int x = 1, y = 2;
int main()
{
cout << "Begin..." << endl;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "Evaluate x and y in main()..." << endl;
int x = 10, y = 20;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
cout << "Step into fn1()..." << endl;
fn1();
cout << "Back in main" << endl;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
return 0;
}
void fn1()
{
int y = 200;
cout << "x = " << x << endl;
cout << "y = " << y << endl;
}
2、实现客户机(CLIENT)类。声明字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeServerName()改变服务器名称。在头文件client.h中声明类,在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。
三、实验报告:
1.程序运行观察
A.截图
2.实现客户机(CLIENT)类
A.程序
# include using namespace std;
class Client
{
public:
static char servername;
static int clientnum;
char *clientname;
Client(char *name1);
static void change()
{
cout<<"请输入要改成的服务器名称:"< cin>>servername; }
void showname()
{
cout<<"name="< } # include"Client.h"
int Client::clientnum=0;
char Client::servername='t';
Client::Client(char *name1)
{clientname=new char[20];
strcpy(clientname,name1);
clientnum++;
}
# include"Client.h"
void main()
{
Client a("zhang");
a.showname();
cout< cout< Client::change(); a.showname();
cout< cout<}B.截图
实验五、数组、指针与字符串实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁
一、实验目的:
1、学习使用数组数据对象及字符串的组织与处理。
2、学习使用标准C++库。
3、掌握指针的使用方法,并通过DEBUG观察指针内容及其所指的对象的内容。
4、练习通过动态内存分配实现动态数组,并体会指针在其中的作用。
二、实验内容:
1、编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。
2、使用动态内存分配生成动态数组来重新完成上题。
3、编程实现两字符串的连接。要求使用字符数组保存字符串,不允许使用系统函数。
4、使用string类声明字符串对象,重新实现上一小题。
三、实验报告:
1.矩阵转置
A.程序
# includeusing namespace std;
void move(int matrix[3][3])
{
int i,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;
}
}
int main()
{
int i,j;
int data[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 < }}
B.截图
2.使用动态内存分配生成动态数组
A.程序
# includeusing namespace std;
void move(int *matrix,int n)
{
int i,j,k;
for(i=0;i for(j=0;j { k= *(matrix + i*n + j);
*(matrix + i*n + j)= *(matrix + j*n + i);
*(matrix + j*n + i)=k;
}
}
int main()
{
int n,i,j;
int *p;
cout <<"请输入矩阵的行、列数:";
cin >> n;
p=new int[n*n];
cout <<"输入矩阵的元素"< for(i=0;i for(j=0;j { cout <<"第"< <<"个元素为:";
cin >> p[i*n +j];
}
cout <<"输入的矩阵为:"< for(i=0;i { for(j=0;j cout < cout< } move(p,n);
cout <<"转置后的矩阵为:"< for(i=0;i { for(j=0;j cout < cout < }}
B.截图
3.编程实现两字符串的连接
A.程序
#include using namespace std;
int main()
{
char str1[40];
char str2[20];
int c1=0,c2=0;
cout<<"请输入第一个字符串: ";
cin>>str1;
cout<<"\\n请输入第二个字符串: ";
cin>>str2;
while(str1[c1]!='\\0')
++counter1;
while(str2[c2]!='\\0')
{
str1[c1]=str2[c2];
++c1;
++c2;
}
str1[c1]='\\0';
cout<<"\\n连接后的字符串: "<}B.截图
4.使用string类声明字符串对象
A.程序
#include#includeusing namespace std;
int main()
{
string s1,s2;
cout<<"请输入第一个字符串: ";
cin>>s1;
cout<<"\\n请输入第二个字符串: ";
cin>>s2;
s1+=s2;
cout<<"连接后的字符串为:"<}B.截图
实验六、继承和派生实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁
一、实验目的:
1、学习声明和使用类的继承关系,声明派生类。
2、熟悉不同继承方式下对基类成员的访问控制。
3、学习利用虚基类解决二义性问题。
二、实验内容:
1、定义一个基类Animal,有私有数据成员变量age,构造其派生类dog,在其成员函数setAge(int n)中直接给Age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程测试一下。
2、定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数的析构函数的执行情况。
3、定义一个车(Vehicle)基类,具有MaxSpeed,Weight等成员变量,Run,Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和moorcar派生出摩托车(motorcycle)类,在继承过程中注意把vehicle设置为虚基类。如果不设为虚基类,会出现什么问题?编程测试一下。
三、实验报告:
1定义一个基类Animal
A.程序
#includeusing namespace std;
class Animal{
public:
int age;
};
class Dog:public Animal{
public:
SetAge(int n)
{
age=n;
cout< }};
void main()
{
Dog dog;
dog.SetAge(4);
}
B.截图
2.定义一个基类BaseClass,
A.程序
#includeusing namespace std;
class BaseClass{
public:
int number;
BaseClass()
{
cout<<"BaseClass"< } ~BaseClass()
{
cout<<"Destory BaseClass"< }};
class DerivedClass:public BaseClass{
public:
DerivedClass()
{
cout<<"DerivedClass"< } ~DerivedClass()
{
cout<<"Destory DerivedClass"< }};
void main()
{
DerivedClass sl;
}
B.截图
3.定义一个车(Vehicle)基类
A.程序
#includeusing namespace std;
class vehicle
{
public:
vehicle()
{
cout<<"vehicle构造函数被调用"< } ~vehicle()
{
cout<<"vehicle析构函数被调用"< } virtual void Run()
{
cout<<"设置vehicle最大速度和重量"< }
virtual void Stop()
{
cout<<"显示vehicle最大速度和重量"< }
private:
double MaxSpeed,Weight;
};
class bicycle:public vehicle
{
public:
bicycle()
{
cout<<"bicycle构造函数被调用"< } ~bicycle()
{
cout<<"bicycle析构函数被调用"< } void Run()
{
cout<<"设置bicycle最大速度和重量"< } void Stop()
{
cout<<"显示bicycle最大速度和重量"< }private:
double Height;
};
class motorcar:public vehicle
{
public:
motorcar()
{
cout<<"motorcar构造函数被调用"< } ~motorcar()
{
cout<<"motorcar析构函数被调用"< } void Run()
{
cout<<"设置motorcar最大速度和重量"< } void Stop()
{
cout<<"显示motorcar最大速度和重量"< }private:
int SeatNum;
};
class motorcycle:public motorcar, public bicycle
{
public:
motorcycle()
{
cout<<"motorcycle构造函数被调用"< } ~motorcycle()
{
cout<<"motorcycle析构函数被调用"< } void Run()
{
cout<<"设置motorcycle最大速度和重量"< } void Stop()
{
cout<<"显示motorcycle最大速度和重量"< }};
void fun(vehicle *p)
{
p->Run();
p->Stop();
}
int main()
{
vehicle a0,*p;
bicycle a1;
motorcar a2;
motorcycle a3;
cout< p=&a0; fun(p);
p=&a1;
fun(p);
p=&a2;
fun(p);
cout<}B.截图
实验七、 多态性实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁
一、实验目的:
1、掌握运算符重载的方法。
2、掌握使用虚函数实现动态多态性。
二、实验内容:
1、定义Point类,有坐标x,y两个成员变量;对Point类重载++、――运算符,实现对坐标值的改变。
2、定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车类(biclcle)、汽车类(motorcar),从bicycle和motorcar派生出摩托车类(motorcycle),它们都有Run、Stop等成员函数。观察虚函数的作用。
三、实验报告:
1.定义Point类
A.程序
#includeusing namespace std;
class Point{
public:
Point()
{
}
Point(float a,float b)
{
x=a;
y=b;
}
Point operator++()
{
x++;
y++;
return Point(x,y);
}
Point operator--()
{
x--;
y--;
return Point(x,y);
}
void display()
{
cout<<"The Point:"<<"("< }private:
float x;
float y;
};
void main()
{
Point p(3,5);
p.display();
p++;
p.display();
p--;
p.display();
}
B.截图
2.定义一个车(vehicle)基类
A.程序
#includeusing namespace std;
class Vehicle{
public:
void Run()
{
cout<<"Vehicle Run"< } void Stop()
{
cout<<"Vehicle Stop"< }};
class bicycle:public Vehicle{
public:
void Run()
{
cout<<"bicycle Run"< } void Stop()
{
cout<<"bicycle Stop"< }};
class motorcar:public Vehicle{
public:
void Run()
{
cout<<"motorcar Run"< } void Stop()
{
cout<<"motorcar Stop"< }};
class motorcycle:public bicycle,public motorcar{
public:
void Run()
{
cout<<"motorcycle Run"< } void Stop()
{
cout<<"motorcycle Stop"< }};
void main()
{
Vehicle p;
bicycle q;
motorcar x;
motorcycle y;
p.Run();
p.Stop();
q.Run();
q.Stop();
x.Run();
x.Stop();
y.Run();
y.Stop();
}
B.截图
实验八、面向对象综合实验实验报告
系 软件工程 班级 131 学号 1390741 姓名 吴健
同组者 指导教师 柯栋梁
一、实验目的:
1、综合运用面向对象编程思想。
2、学习设计较复杂的类。
二、实验内容:
实现一个计算器类,支持加、减、乘、除等基本运算。
三、实验报告:
A.程序
#includeusing namespace std;
class Opera
{
public:
void get();
void add();
void red();
void mul();
void div();
void quyu();
char get_c(){return c;}
private:
int a;
int b;
char c;
};
void Opera::get()
{
cout<<"请输入你要计算的式子:"<