东北大学软件学院C++实验报告

  • 格式:doc
  • 大小:692.00 KB
  • 文档页数:20

课程编号:B080101020《C++程序设计》实验报告东北大学软件学院1. 实验目的实验一1)学习编写简单的C++程序,并掌握C++程序的基本格式与规范。

2)练习重载函数的使用,掌握指针的使用方法。

3)学习标准输人输出及格式控制。

4)学习使用VC ++的debug调试功能,使用step into追踪到函数内部。

实验二1)学习并掌握类与对象的定义、使用、声明。

2)学习具有不同属性的数据成员与成员函数的访问方式。

3)理解构造函数和析构函数的定义与执行过程。

4)理解什么是运算符重载,掌握运算符重载的方法实验三1)学习定义和使用类的继承关系,定义派生类。

2)熟悉不同继承方式下对基类成员的访问控制。

3)学习使用虚函数实现动态多态性。

4)学习利用虚基类解决二义性问题。

实验四1)加强对模板相关概念的理解,熟悉模板编程的语法。

2)学习编写简单的函数模板和类模板。

3)理解STL中容器、算法、迭代器的等概念,明确它们之间的关系。

4)掌握STL中Vector容器的使用方法。

2. 实验环境编译器:Microsoft Visual C++ 6.0操作系统:Windows 103. 实验内容与实验过程及分析实验一项目一:内容:使用动态数组完成编写并测试3X3矩阵转置函数,使用数组保存3X3矩阵,使用指针实现函数的功能。

代码:main(){int i,j;int **p;p=new int*[3];cout<<"输入矩阵的元素:"<<endl;for(i=0;i<3;i++){p[i]=new int[3];for(j=0;j<3;j++){cin>>p[i][j];}}transpose(p);cout << "转置后的矩阵的为:" << endl;for(i=0; i<3; i++){for (j=0; j<3; j++)cout << p[i][j] << " ";cout << endl;}delete[] p;}void transpose (int **matrix){int i,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;}}}}运行结果:总结:传递二维数组时候通过指针传递,可以对数组进行修改,方便了许多。

项目二:内容:编写程序,读写指定的文件,在每一行前加行号后,将结果输出到屏幕代码:void write(){ofstream out("test.txt");if (out.is_open()){out << "第一行\n";out << "第二行\n";out << "第三行\n";out << "第四行\n";out << "第五行\n";out << "第六行\n";}out.close();}void read(){char buffer[88];ifstream in("test.txt");if (!in.is_open()){cout << "Error opening file";exit(1);}while (!in.eof()){in.getline(buffer, 80);cout << buffer << endl;}in.close();}void main(){cout << "写文件" << endl;write();cout << "读文件" << endl;read();system("pause");}运行结果:总结:学会了C++如何进行文件读写操作。

实验二项目一:内容:以成员函数方式重载的“+”操作符的原型为:CPoint CPoint::operator+ (CPoint pt); 以全局函数方式重载的“-”操作符的原型为:CPoint operator- (CPoint pt1, CPoint pt2);分析以成员函数方式和全局函数方式重载运行符的异同点。

重载的“>>”操作符的原型为:istream& operator>>(istream&, CPoint&);重载的“<<”操作符的原型为:ostream& operator>>(ostream&, CPoint);思考一下,重载的“>>”操作符和“<<”操作符能否作为CPoint类的成员函数来实现。

代码:#include<iostream.h>#include<math.h>class CPoint{private:int x,y;static int nCount ;// nCount用于保存点的个数public:CPoint(int px=0,int py=0):x(px),y(py){}//构造函数,这个地方一定要写函数体内容,不然没有初始化的话会导致运行出错。

//CPoint(CPoint&);~CPoint(){}//这是析构函数int GETX() const{return x;}int GETY() const{return y;}void SetX(int a){x=a;}void SetY(int b){y=b;}void ShowPoint(){cout<<"("<<x<<","<<y<<")";}CPoint operator+ (CPoint& cp2){return CPoint(GETX()+cp2.GETX(),GETY()+cp2.GETY());};friend CPoint operator-(CPoint& cp1,CPoint& cp2);//声明为友元函数//输入输出运算符只能用友元函数重载friend ostream &operator<<(ostream &os,const CPoint &c);friend istream &operator>>(istream &is,CPoint &c);};CPoint operator-(CPoint& cp1,CPoint& cp2){return CPoint(cp1.x-cp2.x,cp1.GETY()-cp2.GETY());}//不要逗号ostream & operator<<(ostream &os,const CPoint &c){cout <<"重载<<直接输出对象得到:"<< "("<<c.GETX()<<","<<c.GETY()<<")"<<endl;return os;}istream & operator>>(istream &is,CPoint &c){is >>c.x>>c.y;return is;}class CLine{private:CPoint pt1, pt2;//pt1和pt2分别代表该线段的起点和终点public:CLine(){}//构造函数CLine(int x1,int y1,int x2,int y2):pt1(x1,y1),pt2(x2,y2){}//必须以参数列表的形式来写,这样才能在声明的时候即初始化CLine(CPoint p1,CPoint p2):pt1(p1),pt2(p2){}//必须以参数列表的形式来写,这样才能在声明的时候即初始化double Distance(){int a=pt1.GETX()-pt2.GETX();int b=pt1.GETY()-pt2.GETY();double distance=sqrt(a*a+b*b);return distance;} //计算该线段长度的成员函数void ShowLine(){pt1.ShowPoint();cout<<"-";pt2.ShowPoint();}};int main(){CPoint cp1(2,4);CPoint cp2(3,6);CPoint cp;cout<<"两个点分别是";cp1.ShowPoint();cp2.ShowPoint();cp=cp1+cp2;//两个点相加cout<<endl;cout<<"两个点相加的结果是";cp.ShowPoint();cp=cp1-cp2;//两个点相减cout<<"两个点相减的结果是";cp.ShowPoint();cout<<endl;CLine line1(1,3,5,0);CLine line2(cp1,cp2);cout<<"线段1是";line1.ShowLine();cout<<endl;cout<<"线段2是";line2.ShowLine();cout<<endl<<"长度为"<<line1.Distance()<<endl;cout <<"重载>>直接创建一个点,请输入两个值:";CPoint LoadPoint;cin>>LoadPoint;cout<<LoadPoint;//重载<<直接输出对象return 0;}运行结果:总结:通过C++重载运算符的操作,可以让编程者自定义各个操作符的运算规则,简化了程序的编写逻辑和过程。