东北大学软件学院C++实验报告材料.docx
《东北大学软件学院C++实验报告材料.docx》由会员分享,可在线阅读,更多相关《东北大学软件学院C++实验报告材料.docx(23页珍藏版)》请在冰豆网上搜索。
东北大学软件学院C++实验报告材料
课程编号:
B080101020
《C++程序设计》
实验报告
某某
学号
班级
指导教师
实验名称
《C++程序设计》综合实验开发与总结
开设学期
2016-2017学年第一学期
开设时间
第15周——第18周
报告日期
XXXX
评定成绩
评定人
XXX
评定日期
2016-01-12
东北大学软件学院
1.实验目的
实验一
1)学习编写简单的C++程序,并掌握C++程序的根本格式与规X。
2)练习重载函数的使用,掌握指针的使用方法。
3)学习标准输人输出与格式控制。
4)学习使用VC++的debug调试功能,使用stepinto追踪到函数内部。
实验二
1)学习并掌握类与对象的定义、使用、声明。
2)学习具有不同属性的数据成员与成员函数的访问方式。
3)理解构造函数和析构函数的定义与执行过程。
4)理解什么是运算符重载,掌握运算符重载的方法
实验三
1)学习定义和使用类的继承关系,定义派生类。
2)熟悉不同继承方式下对基类成员的访问控制。
3)学习使用虚函数实现动态多态性。
4)学习利用虚基类解决二义性问题。
实验四
1)加强对模板相关概念的理解,熟悉模板编程的语法。
2)学习编写简单的函数模板和类模板。
3)理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。
4)掌握STL中Vector容器的使用方法。
2.实验环境
操作系统:
Windows10
3.实验内容与实验过程与分析
实验一
项目一:
内容:
使用动态数组完成编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵,使用指针实现函数的功能。
代码:
main()
{
inti,j;
int**p;
p=newint*[3];
cout<<"输入矩阵的元素:
"<for(i=0;i<3;i++)
{
p[i]=newint[3];
for(j=0;j<3;j++)
{
cin>>p[i][j];
}
}
transpose(p);
cout<<"转置后的矩阵的为:
"<for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<
cout<}
delete[]p;
}
voidtranspose(int**matrix)
{
inti,k,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++){
if(j>i){
k=matrix[j][i];
matrix[j][i]=matrix[i][j];
matrix[i][j]=k;
}
}
}
}
运行结果:
总结:
传递二维数组时候通过指针传递,可以对数组进展修改,方便了许多。
项目二:
内容:
编写程序,读写指定的文件,在每一行前加行号后,将结果输出到屏幕
代码:
voidwrite()
{
ofstreamout("test.txt");
if(out.is_open())
{
out<<"第一行\n";
out<<"第二行\n";
out<<"第三行\n";
out<<"第四行\n";
out<<"第五行\n";
out<<"第六行\n";
}
out.close();
}
voidread()
{
charbuffer[88];
ifstreamin("test.txt");
if(!
in.is_open())
{
cout<<"Erroropeningfile";
exit
(1);
}
while(!
in.eof())
{
in.getline(buffer,80);
cout<}
in.close();
}
voidmain()
{
cout<<"写文件"<write();
cout<<"读文件"<read();
system("pause");
}
运行结果:
总结:
学会了C++如何进展文件读写操作。
实验二
项目一:
内容:
以成员函数方式重载的“+〞操作符的原型为:
CPointCPoint:
:
operator+(CPointpt);以全局函数方式重载的“-〞操作符的原型为:
CPointoperator-(CPointpt1,CPointpt2);分析以成员函数方式和全局函数方式重载运行符的异同点。
重载的“>>〞操作符的原型为:
istream&operator>>(istream&,CPoint&);重载的“<<〞操作符的原型为:
ostream&operator>>(ostream&,CPoint);思考一下,重载的“>>〞操作符和“<<〞操作符能否作为CPoint类的成员函数来实现。
代码:
#include
#include
classCPoint
{
private:
intx,y;
staticintnCount;//nCount用于保存点的个数
public:
CPoint(intpx=0,intpy=0):
x(px),y(py)
{
}//构造函数,这个地方一定要写函数体内容,不然没有初始化的话会导致运行出错。
//CPoint(CPoint&);
~CPoint(){}//这是析构函数
intGETX()const
{
returnx;
}
intGETY()const
{
returny;
}
voidSetX(inta)
{
x=a;
}
voidSetY(intb)
{
y=b;
}
voidShowPoint()
{
cout<<"("<}
CPointoperator+(CPoint&cp2)
{
returnCPoint(GETX()+cp2.GETX(),GETY()+cp2.GETY());
};
friendCPointoperator-(CPoint&cp1,CPoint&cp2);//声明为友元函数
//输入输出运算符只能用友元函数重载
friendostream&operator<<(ostream&os,constCPoint&c);
friendistream&operator>>(istream&is,CPoint&c);
};
CPointoperator-(CPoint&cp1,CPoint&cp2)
{
returnCPoint(cp1.x-cp2.x,cp1.GETY()-cp2.GETY());
}//不要逗号
ostream&operator<<(ostream&os,constCPoint&c)
{
cout<<"重载<<直接输出对象得到:
"<<"("<returnos;
}
istream&operator>>(istream&is,CPoint&c)
{
is>>c.x>>c.y;
returnis;
}
classCLine
{
private:
CPointpt1,pt2;//pt1和pt2分别代表该线段的起点和终点
public:
CLine(){}//构造函数
CLine(intx1,inty1,intx2,inty2)
:
pt1(x1,y1),pt2(x2,y2)
{
}//必须以参数列表的形式来写,这样才能在声明的时候即初始化
CLine(CPointp1,CPointp2)
:
pt1(p1),pt2(p2)
{
}//必须以参数列表的形式来写,这样才能在声明的时候即初始化
doubleDistance()
{
inta=pt1.GETX()-pt2.GETX();
intb=pt1.GETY()-pt2.GETY();
doubledistance=sqrt(a*a+b*b);
returndistance;
}//计算该线段长度的成员函数
voidShowLine()
{
pt1.ShowPoint();
cout<<"-";
pt2.ShowPoint();
}
};
intmain()
{
CPointcp1(2,4);
CPointcp2(3,6);
CPointcp;
cout<<"两个点分别是";
cp1.ShowPoint();
cp2.ShowPoint();
cp=cp1+cp2;//两个点相加
cout<cout<<"两个点相加的结果是";
cp.ShowPoint();
cp=cp1-cp2;//两个点相减
cout<<"两个点相减的结果是";
cp.ShowPoint();
cout<CLineline1(1,3,5,0);
CLineline2(cp1,cp2);
cout<<"线段1是";
line1.ShowLine();
cout<cout<<"线段2是";
line2.ShowLine();
cout<cout<<"重载>>直接创建一个点,请输入两个值:
";
CPointLoadPoint;
cin>>LoadPoint;
cout<return0;
}
运行结果:
总结:
通过C++重载运算符的操作,可以让编程者自定义各个操作符的运算规如此,简化了程序的编写逻辑和过程。
实验三
项目一:
内容:
使用实验2中的CPoint类,定义“空间中点〞类如下:
classCThreePoint:
publicCPoint
{
private:
intz;
public:
CThreePoint();
CThreePoint(int,int,int);
intGetZ();
voidSetZ(intpz);
virtualvoidShowPoint();
};
完成该类中各成员函数的定义。
并利用VC调试工具观察含有继承关系类的构造函数和析构函数的执行情况。
代码:
#include
#include
classCPoint
{
private:
intx,y;
staticintnCount;//nCount用于保存点的个数
public:
CPoint(intpx=0,intpy=0):
x(px),y(py)