【精品推荐】2017年福建农林大学计算机与信息学院实验报告18p
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学计算机与信息学院实验报告
一、实验目的和要求
1.掌握类、类的数据成员、类的成员函数的定义方式,理解类成员的访问控制方式。
2.掌握对象的定义和操作对象的方法。
3.掌握构造函数和析构函数的概念,掌握几种特殊构造函数。
4.理解对象数组、对象指针的概念并能正确应用。
5.理解类的组合关系(对象成员)。
调试程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。
3.对教材中Li3_11.cpp的主函数做如下修改:
(1)将Heapclass *pa1,*pa2改为Heapclass *pa1,*pa2,*p3;
(2)在语句pa=new heapclass;后增加语句pa3= new Heapclass(5);
friend double dist(My&a,My&b);
private:
double x,y;
};
double dist(My&a,My&b)
{
double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int main()
{
My m1,m2(15),m3(13,14);
count++;
}
float student::sum(){return total;}
float student::average(){return total/count;}
int main()
{
float s;
int n;
student a[10];
cout<<"输入学生的个数(10个以内):";
private:
int a;
};
int main()
{
Aa a1(1),a2(2);
a1.print();
cout<<a2.a<<endl; //ERROR
return 0;
}
2.调试下列程序。
//sy3_2.cpp
#include<iostream>
using namespace std;
class TPoint
//sy4_2.cpp
#include<iostream>
#incluBaidu Nhomakorabeae<cmath>
using namespace std;
class My
{
public:
My(double i=0){x=y=i;}
My(double i,double j){x=i;y=j;}
My(My&m) {x=m.x;y=m.y;}
}
cout<<"Exit main"<<endl;
delete pa1;
delete pa2;
delete pa3;
return 0;
}
4#include<iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(){len=0;wid=0;}
6.分析调试sy4_2,回答sy4_2的问题。
7.
程序如下:
//sy4_3
#include<iostream>
using namespace std;
class student
{
public:
void scoretotalcount(float s);
static float sum();
static float average();
cin>>n;
cout<<"输入学生成绩:";
for(int i(0);i<n;i++)
{
cin>>s;
a[i].scoretotalcount( s);
}
cout<<"班级总分为:";
cout<<student::sum()<<endl;
cout<<"班级平均分为:";
cout<<student::average()<<endl;
Rectangle p2(4.0,5.0);
cout<<"p1的矩形尺寸:";
p1.print();
cout<<"p2的矩形尺寸:";
p2.print();
cout<<"p2周长:"<<p2. Circumference()<<endl;
cout<<"p2面积:"<<p2. Area()<<endl;
return 0;
}
(1)指出所有的构造函数,它们在本程序中分别起什么作用?
(2)指出设置默认参数的构造函数。
(3)指出友元函数,将友元函数放到私有部分,观察结果是否有变化。
(4)写出输出结果,并分析输出结果。
7.定义一个Student类,在该类的定义中包含一个数据成员score(分数),两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(float s)用于设置分数,求总分和累计学生人数;静态成员函数sun()用于返回总分;静态成员函数average()用于求平均值。在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分(sy4_3)
Rectangle(double Len, double Wid) {len=Len;wid=Wid;}
double Circumference() { return 2*(len+wid);}
double Area() {return len*wid;}
double getl(){return len;}
5调试下列程序,写出输出结果,并分析输出结果。
//sy4_1.cpp
#include<iostream>
using namespace std;
class My
{
public:
My(int aa)
{
A=aa;
B-=aa;
}
static void fun(My m);
private:
int A;
static int B;
};
TPoint::TPoint(TPoint &p)
{
X=p.X;
Y=p.Y;
cout<<"Copy-initializention Constructor is called\n";
}
int main()
{
TPoint p1(4,9);
TPoint p2(p1);
TPoint p3=p2;
cout<<"p3=("<<p3.getx()<<", "<<p3.gety()<<")\n";
(3)将语句if(!pa1||!pa2)改为if(!pa1||!pa2||!pa3);
(4)在语句delete pa2;后增加语句delete pa3;
写出程序的输出结果,并解释输出结果。
4.请定义一个矩形类(Rectangle),私有数据成员为矩形的长度(len)和宽度(wid),无参构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长,求矩形面积,取矩形长度和宽度,修改矩形长度和宽度为对应形参的值,输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为”length:长度,width:宽度”。(sy3_3.cpp)
#include<iostream>
using namespace std;
class Aa
{
public:
Aa(int i=0) {a=i;cout<<"Constructor"<<a<<endl;}
~Aa(){cout<<"Destructor"<<a<<endl;}
void print(){cout<<a<<endl;}
private:
float score;
static float total;
static int count;
};
float student::total=0;
int student::count=0;
void student::scoretotalcount(float s)
{
score=s;
total+=score;
6.理解this、const、new/delete等关键字的用法并能够正确应用。
7.掌握静态成员的基本使用方法。
8.掌握友元的使用方法,进一步理解其概念和作用。
二、实验内容和原理
1.下面程序sy3_1.cpp中用ERROR标明的语句有错,在不删除和增加代码行的情况下,改正错误语句,使其正确与运行。
//sy3_1.cpp
}
int main()
{
Heapclass *pa1,*pa2,*pa3;
pa1=new Heapclass(4);
pa2=new Heapclass;
pa3=new Heapclass(5);
if(!pa1||!pa2||!pa3)
{
cout<<"Out of Memory!"<<endl;
return 0;
3.写出修改后的程序的结果,并解释输出结果
修改后的程序:
#include<iostream>
using namespace std;
class Heapclass
{
public:
Heapclass(int x);
Heapclass();
~Heapclass();
private:
int i;
};
Heapclass::Heapclass(int x)
8.声明Book和Ruler两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算两者的重量和。(sy4_4.cpp)
三、实验环境
微机及Visual C++6.0。
四、算法描述及实验步骤
1.将cout<<a2.a<<endl;改为a2. .print();然后进行调试运行。
return 0;
}
在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:
cout<<"Contructor is called.\n"
(1)写出程序的输出结果,并解释输出结果。
(2)按下列要求进行调试;
在主函数体内,添加下列说明语句:
Tpoint p4,p5(2);
return 0;
}
8.程序如下:
//sy4_4
#include<iostream>
{
i=x;
cout<<"Contstructor is called."<<i<<endl;
}
Heapclass::Heapclass()
{
cout<<"Default Contstructor is called."<<endl;
}
Heapclass::~Heapclass()
{
cout<<"Default is called."<<endl;
My m4(m3);
cout<<"The distancel:"<<dist(m1,m3)<<endl;
cout<<"The distance2:"<<dist(m2,m3)<<endl;
cout<<"The distance3:"<<dist(m3,m4)<<endl;
cout<<"The distance4:"<<dist(m1,m2)<<endl;
2.在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:
cout<<”Contructor is called.\n”
(1)写出程序的输出结果,并解释输出结果。
(2)按下列要求进行调试;
在主函数体内,添加下列说明语句:
Tpoint p4,p5(2);
观察调试时出现的现象,解释原因并解决
{
public:
TPoint(int x,int y){X=x;Y=y;}
TPoint(TPoint &p);
~TPoint(){cout<<"Destructor is called\n";}
int getx(){return X;}
int gety(){return Y;}
private:
int X,Y;
};
void My::fun(My m)
{
cout<<"A="<<m.A<<endl;
cout<<"B="<<m.B<<endl;
}
int My::B=100;
int main()
{
My P(6),Q(8);
My::fun(P);
Q.fun(Q);
return 0;
}
6.分析并调试程序,完成下列问题。
cout<<"p2的长度:"<<p2. getl()<<endl;
cout<<"p2的宽度:"<<p2. getw()<<endl;
p2.charge(5.0,6.0);
cout<<"修改后的矩形的尺寸:";
p2.print();
return 0;
}
5.调试程序所有sy4_1,写出输出结果,分析输出结果。
double getw(){return wid;}
void charge(double a,double b) {len=a;wid=b;}
print(){cout<<"length:"<<len<<"width:"<<wid;}
private:
int len,wid;
};
int main()
{
Rectangle p1;
一、实验目的和要求
1.掌握类、类的数据成员、类的成员函数的定义方式,理解类成员的访问控制方式。
2.掌握对象的定义和操作对象的方法。
3.掌握构造函数和析构函数的概念,掌握几种特殊构造函数。
4.理解对象数组、对象指针的概念并能正确应用。
5.理解类的组合关系(对象成员)。
调试程序会出现什么现象?为什么?如何解决?(提示:对已有的构造函数进行适当修改)结合运行结果分析如何使用不同的构造函数创建不同的对象。
3.对教材中Li3_11.cpp的主函数做如下修改:
(1)将Heapclass *pa1,*pa2改为Heapclass *pa1,*pa2,*p3;
(2)在语句pa=new heapclass;后增加语句pa3= new Heapclass(5);
friend double dist(My&a,My&b);
private:
double x,y;
};
double dist(My&a,My&b)
{
double dx=a.x-b.x;
double dy=a.y-b.y;
return sqrt(dx*dx+dy*dy);
}
int main()
{
My m1,m2(15),m3(13,14);
count++;
}
float student::sum(){return total;}
float student::average(){return total/count;}
int main()
{
float s;
int n;
student a[10];
cout<<"输入学生的个数(10个以内):";
private:
int a;
};
int main()
{
Aa a1(1),a2(2);
a1.print();
cout<<a2.a<<endl; //ERROR
return 0;
}
2.调试下列程序。
//sy3_2.cpp
#include<iostream>
using namespace std;
class TPoint
//sy4_2.cpp
#include<iostream>
#incluBaidu Nhomakorabeae<cmath>
using namespace std;
class My
{
public:
My(double i=0){x=y=i;}
My(double i,double j){x=i;y=j;}
My(My&m) {x=m.x;y=m.y;}
}
cout<<"Exit main"<<endl;
delete pa1;
delete pa2;
delete pa3;
return 0;
}
4#include<iostream>
using namespace std;
class Rectangle
{
public:
Rectangle(){len=0;wid=0;}
6.分析调试sy4_2,回答sy4_2的问题。
7.
程序如下:
//sy4_3
#include<iostream>
using namespace std;
class student
{
public:
void scoretotalcount(float s);
static float sum();
static float average();
cin>>n;
cout<<"输入学生成绩:";
for(int i(0);i<n;i++)
{
cin>>s;
a[i].scoretotalcount( s);
}
cout<<"班级总分为:";
cout<<student::sum()<<endl;
cout<<"班级平均分为:";
cout<<student::average()<<endl;
Rectangle p2(4.0,5.0);
cout<<"p1的矩形尺寸:";
p1.print();
cout<<"p2的矩形尺寸:";
p2.print();
cout<<"p2周长:"<<p2. Circumference()<<endl;
cout<<"p2面积:"<<p2. Area()<<endl;
return 0;
}
(1)指出所有的构造函数,它们在本程序中分别起什么作用?
(2)指出设置默认参数的构造函数。
(3)指出友元函数,将友元函数放到私有部分,观察结果是否有变化。
(4)写出输出结果,并分析输出结果。
7.定义一个Student类,在该类的定义中包含一个数据成员score(分数),两个静态数据成员total(总分)和学生人数count;成员函数scoretotalcount(float s)用于设置分数,求总分和累计学生人数;静态成员函数sun()用于返回总分;静态成员函数average()用于求平均值。在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分(sy4_3)
Rectangle(double Len, double Wid) {len=Len;wid=Wid;}
double Circumference() { return 2*(len+wid);}
double Area() {return len*wid;}
double getl(){return len;}
5调试下列程序,写出输出结果,并分析输出结果。
//sy4_1.cpp
#include<iostream>
using namespace std;
class My
{
public:
My(int aa)
{
A=aa;
B-=aa;
}
static void fun(My m);
private:
int A;
static int B;
};
TPoint::TPoint(TPoint &p)
{
X=p.X;
Y=p.Y;
cout<<"Copy-initializention Constructor is called\n";
}
int main()
{
TPoint p1(4,9);
TPoint p2(p1);
TPoint p3=p2;
cout<<"p3=("<<p3.getx()<<", "<<p3.gety()<<")\n";
(3)将语句if(!pa1||!pa2)改为if(!pa1||!pa2||!pa3);
(4)在语句delete pa2;后增加语句delete pa3;
写出程序的输出结果,并解释输出结果。
4.请定义一个矩形类(Rectangle),私有数据成员为矩形的长度(len)和宽度(wid),无参构造函数置len和wid为0,有参构造函数置len和wid为对应形参的值,另外还包括求矩形周长,求矩形面积,取矩形长度和宽度,修改矩形长度和宽度为对应形参的值,输出矩形尺寸等公有成员函数。要求输出矩形尺寸的格式为”length:长度,width:宽度”。(sy3_3.cpp)
#include<iostream>
using namespace std;
class Aa
{
public:
Aa(int i=0) {a=i;cout<<"Constructor"<<a<<endl;}
~Aa(){cout<<"Destructor"<<a<<endl;}
void print(){cout<<a<<endl;}
private:
float score;
static float total;
static int count;
};
float student::total=0;
int student::count=0;
void student::scoretotalcount(float s)
{
score=s;
total+=score;
6.理解this、const、new/delete等关键字的用法并能够正确应用。
7.掌握静态成员的基本使用方法。
8.掌握友元的使用方法,进一步理解其概念和作用。
二、实验内容和原理
1.下面程序sy3_1.cpp中用ERROR标明的语句有错,在不删除和增加代码行的情况下,改正错误语句,使其正确与运行。
//sy3_1.cpp
}
int main()
{
Heapclass *pa1,*pa2,*pa3;
pa1=new Heapclass(4);
pa2=new Heapclass;
pa3=new Heapclass(5);
if(!pa1||!pa2||!pa3)
{
cout<<"Out of Memory!"<<endl;
return 0;
3.写出修改后的程序的结果,并解释输出结果
修改后的程序:
#include<iostream>
using namespace std;
class Heapclass
{
public:
Heapclass(int x);
Heapclass();
~Heapclass();
private:
int i;
};
Heapclass::Heapclass(int x)
8.声明Book和Ruler两个类,二者都有weight属性,定义二者的一个友元函数totalWeight(),计算两者的重量和。(sy4_4.cpp)
三、实验环境
微机及Visual C++6.0。
四、算法描述及实验步骤
1.将cout<<a2.a<<endl;改为a2. .print();然后进行调试运行。
return 0;
}
在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:
cout<<"Contructor is called.\n"
(1)写出程序的输出结果,并解释输出结果。
(2)按下列要求进行调试;
在主函数体内,添加下列说明语句:
Tpoint p4,p5(2);
return 0;
}
8.程序如下:
//sy4_4
#include<iostream>
{
i=x;
cout<<"Contstructor is called."<<i<<endl;
}
Heapclass::Heapclass()
{
cout<<"Default Contstructor is called."<<endl;
}
Heapclass::~Heapclass()
{
cout<<"Default is called."<<endl;
My m4(m3);
cout<<"The distancel:"<<dist(m1,m3)<<endl;
cout<<"The distance2:"<<dist(m2,m3)<<endl;
cout<<"The distance3:"<<dist(m3,m4)<<endl;
cout<<"The distance4:"<<dist(m1,m2)<<endl;
2.在该程序中,将TPoint类的带有两个参数的构造函数进行修改,在函数体内增添下述语句:
cout<<”Contructor is called.\n”
(1)写出程序的输出结果,并解释输出结果。
(2)按下列要求进行调试;
在主函数体内,添加下列说明语句:
Tpoint p4,p5(2);
观察调试时出现的现象,解释原因并解决
{
public:
TPoint(int x,int y){X=x;Y=y;}
TPoint(TPoint &p);
~TPoint(){cout<<"Destructor is called\n";}
int getx(){return X;}
int gety(){return Y;}
private:
int X,Y;
};
void My::fun(My m)
{
cout<<"A="<<m.A<<endl;
cout<<"B="<<m.B<<endl;
}
int My::B=100;
int main()
{
My P(6),Q(8);
My::fun(P);
Q.fun(Q);
return 0;
}
6.分析并调试程序,完成下列问题。
cout<<"p2的长度:"<<p2. getl()<<endl;
cout<<"p2的宽度:"<<p2. getw()<<endl;
p2.charge(5.0,6.0);
cout<<"修改后的矩形的尺寸:";
p2.print();
return 0;
}
5.调试程序所有sy4_1,写出输出结果,分析输出结果。
double getw(){return wid;}
void charge(double a,double b) {len=a;wid=b;}
print(){cout<<"length:"<<len<<"width:"<<wid;}
private:
int len,wid;
};
int main()
{
Rectangle p1;